mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-05-14 08:41:28 +00:00
Merge branch 'release/1.13.0'
This commit is contained in:
16
.github/workflows/appimage.yml
vendored
16
.github/workflows/appimage.yml
vendored
@@ -11,7 +11,7 @@ on:
|
||||
|
||||
env:
|
||||
JAVA_DIST: 'zulu'
|
||||
JAVA_VERSION: '21.0.2+13'
|
||||
JAVA_VERSION: '22.0.1+8'
|
||||
|
||||
jobs:
|
||||
get-version:
|
||||
@@ -29,12 +29,12 @@ jobs:
|
||||
include:
|
||||
- os: ubuntu-latest
|
||||
appimage-suffix: x86_64
|
||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_linux-x64_bin-jmods.zip'
|
||||
openjfx-sha: '7baed11ca56d5fee85995fa6612d4299f1e8b7337287228f7f12fd50407c56f8'
|
||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-x64_bin-jmods.zip'
|
||||
openjfx-sha: 'fbb22f35951c2e049cc2554dd03c2c56b4f5adc4b2ae9248872f46175ac103d8'
|
||||
- os: [self-hosted, Linux, ARM64]
|
||||
appimage-suffix: aarch64
|
||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_linux-aarch64_bin-jmods.zip'
|
||||
openjfx-sha: '871e7b9d7af16aef2e55c1b7830d0e0b2503b13dd8641374ba7e55ecb81d2ef9'
|
||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-aarch64_bin-jmods.zip'
|
||||
openjfx-sha: '1982ad168a5e8d7cf4a9458a7d088b4f0552d0ac3f24f23fb88f8bc7e8d69a13'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup Java
|
||||
@@ -68,7 +68,7 @@ jobs:
|
||||
- name: Set version
|
||||
run : mvn versions:set -DnewVersion=${{ needs.get-version.outputs.semVerStr }}
|
||||
- name: Run maven
|
||||
run: mvn -B clean package -Plinux -DskipTests
|
||||
run: mvn -B clean package -Plinux -DskipTests -Djavafx.platform=linux
|
||||
- name: Patch target dir
|
||||
run: |
|
||||
cp LICENSE.txt target
|
||||
@@ -80,7 +80,7 @@ jobs:
|
||||
--verbose
|
||||
--output runtime
|
||||
--module-path "${JAVA_HOME}/jmods:openjfx-jmods"
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net
|
||||
--strip-native-commands
|
||||
--no-header-files
|
||||
--no-man-pages
|
||||
@@ -169,7 +169,7 @@ jobs:
|
||||
if-no-files-found: error
|
||||
- name: Publish AppImage on GitHub Releases
|
||||
if: startsWith(github.ref, 'refs/tags/') && github.event.action == 'published'
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
fail_on_unmatched_files: true
|
||||
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||
|
||||
40
.github/workflows/av-whitelist.yml
vendored
Normal file
40
.github/workflows/av-whitelist.yml
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
name: AntiVirus Whitelisting
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
url:
|
||||
description: "Url to the file to upload"
|
||||
required: true
|
||||
type: string
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
url:
|
||||
description: "Url to the file to upload"
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
allowlist:
|
||||
name: Anti Virus Allowlisting
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Download file
|
||||
run: |
|
||||
curl --remote-name ${{ inputs.url }} -L
|
||||
- name: Upload to Kaspersky
|
||||
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
|
||||
with:
|
||||
protocol: ftps
|
||||
server: allowlist.kaspersky-labs.com
|
||||
port: 990
|
||||
username: ${{ secrets.ALLOWLIST_KASPERSKY_USERNAME }}
|
||||
password: ${{ secrets.ALLOWLIST_KASPERSKY_PASSWORD }}
|
||||
- name: Upload to Avast
|
||||
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
|
||||
with:
|
||||
protocol: ftp
|
||||
server: whitelisting.avast.com
|
||||
port: 21
|
||||
username: ${{ secrets.ALLOWLIST_AVAST_USERNAME }}
|
||||
password: ${{ secrets.ALLOWLIST_AVAST_PASSWORD }}
|
||||
6
.github/workflows/build.yml
vendored
6
.github/workflows/build.yml
vendored
@@ -7,7 +7,7 @@ on:
|
||||
|
||||
env:
|
||||
JAVA_DIST: 'zulu'
|
||||
JAVA_VERSION: 21
|
||||
JAVA_VERSION: 22
|
||||
|
||||
defaults:
|
||||
run:
|
||||
@@ -33,7 +33,7 @@ jobs:
|
||||
- name: Build and Test
|
||||
run: >
|
||||
xvfb-run
|
||||
mvn -B verify
|
||||
mvn -B verify -Djavafx.platform=linux
|
||||
jacoco:report
|
||||
org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
|
||||
-Pcoverage
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
- name: Draft a release
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
draft: true
|
||||
discussion_category_name: releases
|
||||
|
||||
2
.github/workflows/check-jdk-updates.yml
vendored
2
.github/workflows/check-jdk-updates.yml
vendored
@@ -5,7 +5,7 @@ on:
|
||||
- cron: '0 0 1 * *' # run once a month at the first day of month
|
||||
|
||||
env:
|
||||
JDK_VERSION: '21.0.1+12'
|
||||
JDK_VERSION: '22.0.1+8'
|
||||
JDK_VENDOR: zulu
|
||||
|
||||
jobs:
|
||||
|
||||
16
.github/workflows/debian.yml
vendored
16
.github/workflows/debian.yml
vendored
@@ -17,13 +17,13 @@ on:
|
||||
|
||||
env:
|
||||
JAVA_DIST: 'zulu'
|
||||
JAVA_VERSION: '21.0.2+13'
|
||||
COFFEELIBS_JDK: 21
|
||||
COFFEELIBS_JDK_VERSION: '21.0.2+13-0ppa1'
|
||||
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_linux-x64_bin-jmods.zip'
|
||||
OPENJFX_JMODS_AMD64_HASH: '7baed11ca56d5fee85995fa6612d4299f1e8b7337287228f7f12fd50407c56f8'
|
||||
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_linux-aarch64_bin-jmods.zip'
|
||||
OPENJFX_JMODS_AARCH64_HASH: '871e7b9d7af16aef2e55c1b7830d0e0b2503b13dd8641374ba7e55ecb81d2ef9'
|
||||
JAVA_VERSION: '22.0.1+8'
|
||||
COFFEELIBS_JDK: 22
|
||||
COFFEELIBS_JDK_VERSION: '22.0.1+8-0ppa1'
|
||||
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-x64_bin-jmods.zip'
|
||||
OPENJFX_JMODS_AMD64_HASH: 'fbb22f35951c2e049cc2554dd03c2c56b4f5adc4b2ae9248872f46175ac103d8'
|
||||
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_linux-aarch64_bin-jmods.zip'
|
||||
OPENJFX_JMODS_AARCH64_HASH: '1982ad168a5e8d7cf4a9458a7d088b4f0552d0ac3f24f23fb88f8bc7e8d69a13'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
check-latest: true
|
||||
cache: 'maven'
|
||||
- name: Run maven
|
||||
run: mvn -B clean package -Plinux -DskipTests
|
||||
run: mvn -B clean package -Plinux -Djavafx.platform=linux -DskipTests
|
||||
- name: Download OpenJFX jmods
|
||||
id: download-jmods
|
||||
run: |
|
||||
|
||||
3
.github/workflows/dependency-check.yml
vendored
3
.github/workflows/dependency-check.yml
vendored
@@ -11,7 +11,8 @@ jobs:
|
||||
with:
|
||||
runner-os: 'ubuntu-latest'
|
||||
java-distribution: 'temurin'
|
||||
java-version: 21
|
||||
java-version: 22
|
||||
check-command: 'mvn -B validate -Pdependency-check -Djavafx.platform=linux'
|
||||
secrets:
|
||||
nvd-api-key: ${{ secrets.NVD_API_KEY }}
|
||||
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||
|
||||
4
.github/workflows/flathub.yml
vendored
4
.github/workflows/flathub.yml
vendored
@@ -56,7 +56,7 @@ jobs:
|
||||
- name: Update build file
|
||||
run: |
|
||||
sed -i -e 's/VERSION: [0-9]\+\.[0-9]\+\.[0-9]\+.*/VERSION: ${{ needs.get-version.outputs.semVerStr }}/g' org.cryptomator.Cryptomator.yaml
|
||||
sed -i -e 's/sha512: [0-9A-Za-z_-\+]\{128\} #CRYPTOMATOR/sha512: ${{ needs.tarball.outputs.sha512 }} #CRYPTOMATOR/g' org.cryptomator.Cryptomator.yaml
|
||||
sed -i -e 's/sha512: [0-9A-Za-z_\+-]\{128\} #CRYPTOMATOR/sha512: ${{ needs.tarball.outputs.sha512 }} #CRYPTOMATOR/g' org.cryptomator.Cryptomator.yaml
|
||||
sed -i -e 's;url: https://github.com/cryptomator/cryptomator/archive/refs/tags/[^[:blank:]]\+;url: ${{ needs.tarball.outputs.url }};g' org.cryptomator.Cryptomator.yaml
|
||||
- name: Commit and push
|
||||
run: |
|
||||
@@ -68,7 +68,7 @@ jobs:
|
||||
git push
|
||||
- name: Create pull request
|
||||
run: |
|
||||
echo "> [!IMPORTANT]\n> Todos:\n> - [ ] Update maven dependencies\n> - [ ] Check for JDK update\n> - [ ] Check for JFX update" > pr_body.md
|
||||
printf "> [!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)
|
||||
echo "FLATHUB_PR_URL=$PR_URL" >> "$GITHUB_ENV"
|
||||
env:
|
||||
|
||||
4
.github/workflows/get-version.yml
vendored
4
.github/workflows/get-version.yml
vendored
@@ -23,7 +23,7 @@ on:
|
||||
|
||||
env:
|
||||
JAVA_DIST: 'zulu'
|
||||
JAVA_VERSION: 21
|
||||
JAVA_VERSION: 22
|
||||
|
||||
jobs:
|
||||
determine-version:
|
||||
@@ -71,6 +71,6 @@ jobs:
|
||||
echo "revNum=${REVCOUNT}" >> $GITHUB_OUTPUT
|
||||
echo "type=${TYPE}" >> $GITHUB_OUTPUT
|
||||
- name: Validate Version
|
||||
uses: skymatic/semver-validation-action@v2
|
||||
uses: skymatic/semver-validation-action@v3
|
||||
with:
|
||||
version: ${{ steps.versions.outputs.semVerStr }}
|
||||
20
.github/workflows/mac-dmg.yml
vendored
20
.github/workflows/mac-dmg.yml
vendored
@@ -16,7 +16,7 @@ on:
|
||||
|
||||
env:
|
||||
JAVA_DIST: 'zulu'
|
||||
JAVA_VERSION: '21.0.2+13'
|
||||
JAVA_VERSION: '22.0.1+8'
|
||||
|
||||
jobs:
|
||||
get-version:
|
||||
@@ -37,15 +37,15 @@ jobs:
|
||||
output-suffix: x64
|
||||
xcode-path: '/Applications/Xcode_13.2.1.app'
|
||||
fuse-lib: macFUSE
|
||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_osx-x64_bin-jmods.zip'
|
||||
openjfx-sha: 'bd6abab20da73d5a968dcf2fd915d81b5fb919340e3bb84979ee9a888a829939'
|
||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_osx-x64_bin-jmods.zip'
|
||||
openjfx-sha: 'e07a11c112abbdebe7c058b44c151e1e475de748671d896aef3d73f32453c248'
|
||||
- os: [self-hosted, macOS, ARM64]
|
||||
architecture: aarch64
|
||||
output-suffix: arm64
|
||||
xcode-path: '/Applications/Xcode_13.2.1.app'
|
||||
fuse-lib: FUSE-T
|
||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_osx-aarch64_bin-jmods.zip'
|
||||
openjfx-sha: '7afaa1c57a6cc3c384d636e597b9a5364693e2db4aaec0a6e63d2fa964400b58'
|
||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_osx-aarch64_bin-jmods.zip'
|
||||
openjfx-sha: '572fce94b9b09d316b960a49e3c2b5d35231ed0463e3b1c4020b8de89783b51d'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup Java
|
||||
@@ -79,7 +79,7 @@ jobs:
|
||||
- name: Set version
|
||||
run : mvn versions:set -DnewVersion=${{ needs.get-version.outputs.semVerStr }}
|
||||
- name: Run maven
|
||||
run: mvn -B clean package -Pmac -DskipTests
|
||||
run: mvn -B -Djavafx.platform=mac clean package -Pmac -DskipTests
|
||||
- name: Patch target dir
|
||||
run: |
|
||||
cp LICENSE.txt target
|
||||
@@ -91,7 +91,7 @@ jobs:
|
||||
--verbose
|
||||
--output runtime
|
||||
--module-path "${JAVA_HOME}/jmods:openjfx-jmods"
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.accessibility,jdk.management.jfr
|
||||
--strip-native-commands
|
||||
--no-header-files
|
||||
--no-man-pages
|
||||
@@ -142,7 +142,7 @@ jobs:
|
||||
REVISION_NO: ${{ needs.get-version.outputs.revNum }}
|
||||
- name: Generate license for dmg
|
||||
run: >
|
||||
mvn -B license:add-third-party
|
||||
mvn -B -Djavafx.platform=mac license:add-third-party
|
||||
-Dlicense.thirdPartyFilename=license.rtf
|
||||
-Dlicense.outputDirectory=dist/mac/dmg/resources
|
||||
-Dlicense.fileTemplate=dist/mac/dmg/resources/licenseTemplate.ftl
|
||||
@@ -175,7 +175,7 @@ jobs:
|
||||
run: |
|
||||
echo "Codesigning jdk files..."
|
||||
find Cryptomator.app/Contents/runtime/Contents/Home/lib/ -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
|
||||
find Cryptomator.app/Contents/runtime/Contents/Home/lib/ -name 'jspawnhelper' -exec codesign --force -o runtime -s ${CODESIGN_IDENTITY} {} \;
|
||||
find Cryptomator.app/Contents/runtime/Contents/Home/lib/ \( -name 'jspawnhelper' -o -name 'pauseengine' -o -name 'simengine' \) -exec codesign --force -o runtime -s ${CODESIGN_IDENTITY} {} \;
|
||||
echo "Codesigning jar contents..."
|
||||
find Cryptomator.app/Contents/runtime/Contents/MacOS -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
|
||||
for JAR_PATH in `find Cryptomator.app -name "*.jar"`; do
|
||||
@@ -259,7 +259,7 @@ jobs:
|
||||
if-no-files-found: error
|
||||
- name: Publish dmg on GitHub Releases
|
||||
if: startsWith(github.ref, 'refs/tags/') && github.event.action == 'published'
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
fail_on_unmatched_files: true
|
||||
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||
|
||||
2
.github/workflows/post-publish.yml
vendored
2
.github/workflows/post-publish.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
||||
GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }}
|
||||
GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }}
|
||||
- name: Publish asc on GitHub Releases
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
fail_on_unmatched_files: true
|
||||
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||
|
||||
4
.github/workflows/pullrequest.yml
vendored
4
.github/workflows/pullrequest.yml
vendored
@@ -5,7 +5,7 @@ on:
|
||||
|
||||
env:
|
||||
JAVA_DIST: 'zulu'
|
||||
JAVA_VERSION: 21
|
||||
JAVA_VERSION: 22
|
||||
|
||||
defaults:
|
||||
run:
|
||||
@@ -24,4 +24,4 @@ jobs:
|
||||
java-version: ${{ env.JAVA_VERSION }}
|
||||
cache: 'maven'
|
||||
- name: Build and Test
|
||||
run: xvfb-run mvn -B clean install jacoco:report -Pcoverage
|
||||
run: xvfb-run mvn -B clean install jacoco:report -Pcoverage -Djavafx.platform=linux
|
||||
4
.github/workflows/release-check.yml
vendored
4
.github/workflows/release-check.yml
vendored
@@ -12,7 +12,7 @@ defaults:
|
||||
|
||||
env:
|
||||
JAVA_DIST: 'zulu'
|
||||
JAVA_VERSION: 21
|
||||
JAVA_VERSION: 22
|
||||
|
||||
jobs:
|
||||
check-preconditions:
|
||||
@@ -60,6 +60,6 @@ jobs:
|
||||
- name: Run org.owasp:dependency-check plugin
|
||||
id: dependency-check
|
||||
continue-on-error: true
|
||||
run: mvn -B verify -Pdependency-check -DskipTests
|
||||
run: mvn -B verify -Pdependency-check -DskipTests -Djavafx.platform=linux
|
||||
env:
|
||||
NVD_API_KEY: ${{ secrets.NVD_API_KEY }}
|
||||
98
.github/workflows/win-exe.yml
vendored
98
.github/workflows/win-exe.yml
vendored
@@ -16,9 +16,9 @@ on:
|
||||
|
||||
env:
|
||||
JAVA_DIST: 'zulu'
|
||||
JAVA_VERSION: '21.0.2+13'
|
||||
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_windows-x64_bin-jmods.zip'
|
||||
OPENJFX_JMODS_AMD64_HASH: 'daf8acae631c016c24cfe23f88469400274d3441dd890615a42dfb501f3eb94a'
|
||||
JAVA_VERSION: '22.0.1+8'
|
||||
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.1/openjfx-22.0.1_windows-x64_bin-jmods.zip'
|
||||
OPENJFX_JMODS_AMD64_HASH: 'de82e53179032a49bec005deb4438e8f261d08c4b58864a5c17e1d87286b09dd'
|
||||
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'
|
||||
|
||||
@@ -77,7 +77,7 @@ jobs:
|
||||
- name: Set version
|
||||
run : mvn versions:set -DnewVersion=${{ needs.get-version.outputs.semVerStr }}
|
||||
- name: Run maven
|
||||
run: mvn -B clean package -Pwin -DskipTests
|
||||
run: mvn -B clean package -Pwin -DskipTests -Djavafx.platform=win
|
||||
- name: Patch target dir
|
||||
run: |
|
||||
cp LICENSE.txt target
|
||||
@@ -89,7 +89,7 @@ jobs:
|
||||
--verbose
|
||||
--output runtime
|
||||
--module-path "jfxjmods;${JAVA_HOME}/jmods"
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.accessibility,jdk.management.jfr
|
||||
--strip-native-commands
|
||||
--no-header-files
|
||||
--no-man-pages
|
||||
@@ -199,7 +199,7 @@ jobs:
|
||||
}
|
||||
- name: Generate license for MSI
|
||||
run: >
|
||||
mvn -B license:add-third-party
|
||||
mvn -B license:add-third-party "-Djavafx.platform=win"
|
||||
"-Dlicense.thirdPartyFilename=license.rtf"
|
||||
"-Dlicense.outputDirectory=dist/win/resources"
|
||||
"-Dlicense.fileTemplate=dist/win/resources/licenseTemplate.ftl"
|
||||
@@ -257,15 +257,6 @@ jobs:
|
||||
Cryptomator-*.msi
|
||||
Cryptomator-*.asc
|
||||
if-no-files-found: error
|
||||
- name: Publish .msi on GitHub Releases
|
||||
if: startsWith(github.ref, 'refs/tags/') && github.event.action == 'published'
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
fail_on_unmatched_files: true
|
||||
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||
files: |
|
||||
*.msi
|
||||
*.asc
|
||||
|
||||
build-exe:
|
||||
name: Build .exe installer
|
||||
@@ -288,7 +279,7 @@ jobs:
|
||||
cache: 'maven'
|
||||
- name: Generate license for exe
|
||||
run: >
|
||||
mvn -B license:add-third-party
|
||||
mvn -B license:add-third-party "-Djavafx.platform=win"
|
||||
"-Dlicense.thirdPartyFilename=license.rtf"
|
||||
"-Dlicense.fileTemplate=dist/win/bundle/resources/licenseTemplate.ftl"
|
||||
"-Dlicense.outputDirectory=dist/win/bundle/resources"
|
||||
@@ -368,59 +359,48 @@ jobs:
|
||||
Cryptomator-*.exe
|
||||
Cryptomator-*.asc
|
||||
if-no-files-found: error
|
||||
- name: Publish .msi on GitHub Releases
|
||||
if: startsWith(github.ref, 'refs/tags/') && github.event.action == 'published'
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
fail_on_unmatched_files: true
|
||||
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||
files: |
|
||||
Cryptomator-*.exe
|
||||
Cryptomator-*.asc
|
||||
|
||||
allowlist:
|
||||
name: Anti Virus Allowlisting
|
||||
publish:
|
||||
name: Publish installers to the github release
|
||||
if: startsWith(github.ref, 'refs/tags/') && github.event.action == 'published'
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build-msi, build-exe]
|
||||
outputs:
|
||||
download-url-msi: ${{ fromJSON(steps.publish.outputs.assets)[0].browser_download_url }}
|
||||
download-url-exe: ${{ fromJSON(steps.publish.outputs.assets)[1].browser_download_url }}
|
||||
steps:
|
||||
- name: Download .msi
|
||||
- name: Download installers
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: msi
|
||||
path: msi
|
||||
- name: Download .exe
|
||||
uses: actions/download-artifact@v4
|
||||
merge-multiple: true
|
||||
- name: Publish .msi on GitHub Releases
|
||||
id: publish
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
name: exe
|
||||
path: exe
|
||||
- name: Collect files
|
||||
run: |
|
||||
mkdir files
|
||||
cp msi/*.msi files
|
||||
cp exe/*.exe files
|
||||
- name: Upload to Kaspersky
|
||||
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
|
||||
with:
|
||||
protocol: ftps
|
||||
server: allowlist.kaspersky-labs.com
|
||||
port: 990
|
||||
username: ${{ secrets.ALLOWLIST_KASPERSKY_USERNAME }}
|
||||
password: ${{ secrets.ALLOWLIST_KASPERSKY_PASSWORD }}
|
||||
local-dir: files/
|
||||
- name: Upload to Avast
|
||||
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
|
||||
with:
|
||||
protocol: ftp
|
||||
server: whitelisting.avast.com
|
||||
port: 21
|
||||
username: ${{ secrets.ALLOWLIST_AVAST_USERNAME }}
|
||||
password: ${{ secrets.ALLOWLIST_AVAST_PASSWORD }}
|
||||
local-dir: files/
|
||||
fail_on_unmatched_files: true
|
||||
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||
# do not change ordering of filelist, required for correct job output
|
||||
files: |
|
||||
*.msi
|
||||
*.exe
|
||||
*.asc
|
||||
|
||||
allowlist-msi:
|
||||
uses: ./.github/workflows/av-whitelist.yml
|
||||
needs: [publish]
|
||||
with:
|
||||
url: ${{ needs.publish.outputs.download-url-msi }}
|
||||
|
||||
allowlist-exe:
|
||||
uses: ./.github/workflows/av-whitelist.yml
|
||||
needs: [publish]
|
||||
with:
|
||||
url: ${{ needs.publish.outputs.download-url-exe }}
|
||||
|
||||
notify-winget:
|
||||
name: Notify for winget-release
|
||||
if: startsWith(github.ref, 'refs/tags/') && github.event.action == 'published' && needs.get-version.outputs.versionType == 'stable'
|
||||
needs: [build-msi, get-version]
|
||||
if: needs.get-version.outputs.versionType == 'stable'
|
||||
needs: [publish, get-version]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Slack Notification
|
||||
|
||||
22
.idea/compiler.xml
generated
22
.idea/compiler.xml
generated
@@ -14,31 +14,29 @@
|
||||
<option name="dagger.fastInit" value="enabled" />
|
||||
<option name="dagger.formatGeneratedSource" value="enabled" />
|
||||
<processorPath useClasspath="false">
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-compiler/2.48.1/dagger-compiler-2.48.1.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger/2.48.1/dagger-2.48.1.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-compiler/2.49/dagger-compiler-2.49.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger/2.49/dagger-2.49.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/javax/inject/javax.inject/1/javax.inject-1.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/dagger/dagger-spi/2.49/dagger-spi-2.49.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/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/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$/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$/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/google/googlejavaformat/google-java-format/1.5/google-java-format-1.5.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/javac-shaded/9-dev-r4023-3/javac-shaded-9-dev-r4023-3.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/com/squareup/kotlinpoet/1.11.0/kotlinpoet-1.11.0.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.10/kotlin-stdlib-jdk8-1.6.10.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.10/kotlin-stdlib-jdk7-1.6.10.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-reflect/1.6.10/kotlin-reflect-1.6.10.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/net/ltgt/gradle/incap/incap/0.2/incap-0.2.jar" />
|
||||
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar" />
|
||||
</processorPath>
|
||||
<module name="cryptomator" />
|
||||
</profile>
|
||||
|
||||
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -8,7 +8,7 @@
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_21_PREVIEW" project-jdk-name="21" project-jdk-type="JavaSDK">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_22" project-jdk-name="22" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -33,7 +33,6 @@ Cryptomator is provided free of charge as an open-source project despite the hig
|
||||
<td><a href="https://mowcapital.com/"><img src="https://cryptomator.org/img/sponsors/mowcapital.svg" alt="Mow Capital" height="28"></a></td>
|
||||
<td><a href="https://www.easeus.com/"><img src="https://cryptomator.org/img/sponsors/easeus.png" alt="EaseUS" height="40"></a></td>
|
||||
<td><a href="https://www.hassmann-it-forensik.de/"><img src="https://cryptomator.org/img/sponsors/hassmannitforensik.png" alt="Hassmann IT-Forensik" height="40"></a></td>
|
||||
<td><a href="https://ente.io/"><img src="https://cryptomator.org/img/sponsors/ente.svg" alt="Ente" height="58"></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
4
dist/linux/appimage/.gitignore
vendored
4
dist/linux/appimage/.gitignore
vendored
@@ -1,4 +1,6 @@
|
||||
# created during build
|
||||
# downloaded/created during build
|
||||
openjfx-jmods.zip
|
||||
*.jmod
|
||||
Cryptomator.AppDir
|
||||
*.AppImage
|
||||
*.AppImage.zsync
|
||||
40
dist/linux/appimage/build.sh
vendored
40
dist/linux/appimage/build.sh
vendored
@@ -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)
|
||||
SEMVER_STR=${VERSION}
|
||||
MACHINE_TYPE=$(uname -m)
|
||||
CPU_ARCH=$(uname -p)
|
||||
|
||||
if [[ ! "${MACHINE_TYPE}" =~ x86_64|aarch64 ]]; then echo "Platform ${MACHINE_TYPE} not supported"; exit 1; fi
|
||||
if [[ ! "${CPU_ARCH}" =~ x86_64|aarch64 ]]; then echo "Platform ${CPU_ARCH} not supported"; exit 1; fi
|
||||
|
||||
mvn -f ../../../pom.xml versions:set -DnewVersion=${SEMVER_STR}
|
||||
|
||||
# compile
|
||||
mvn -B -f ../../../pom.xml clean package -Plinux -DskipTests
|
||||
mvn -B -f ../../../pom.xml clean package -Plinux -DskipTests -Djavafx.platform=linux
|
||||
cp ../../../LICENSE.txt ../../../target
|
||||
cp ../../../target/cryptomator-*.jar ../../../target/mods
|
||||
|
||||
|
||||
# download javaFX jmods
|
||||
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}";
|
||||
JAVAFX_VERSION=22.0.1
|
||||
JAVAFX_ARCH="x64"
|
||||
JAVAFX_JMODS_SHA256='fbb22f35951c2e049cc2554dd03c2c56b4f5adc4b2ae9248872f46175ac103d8'
|
||||
if [ "${CPU_ARCH}" = "aarch64" ]; then
|
||||
JAVAFX_ARCH="aarch64"
|
||||
JAVAFX_JMODS_SHA256='1982ad168a5e8d7cf4a9458a7d088b4f0552d0ac3f24f23fb88f8bc7e8d69a13'
|
||||
fi
|
||||
|
||||
curl -L ${OPENJFX_URL} -o openjfx-jmods.zip
|
||||
echo "${OPENJFX_SHA} openjfx-jmods.zip" | shasum -a256 --check
|
||||
# download javaFX jmods
|
||||
JAVAFX_JMODS_URL="https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-21.0.1_linux-${JAVAFX_ARCH}_bin-jmods.zip"
|
||||
|
||||
|
||||
curl -L ${JAVAFX_JMODS_URL} -o openjfx-jmods.zip
|
||||
echo "${JAVAFX_JMODS_SHA256} openjfx-jmods.zip" | shasum -a256 --check
|
||||
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
|
||||
JMOD_VERSION=$(jmod describe ./openjfx-jmods/javafx.base.jmod | head -1)
|
||||
@@ -56,7 +56,7 @@ ${JAVA_HOME}/bin/jlink \
|
||||
--verbose \
|
||||
--output runtime \
|
||||
--module-path "${JAVA_HOME}/jmods:openjfx-jmods" \
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net \
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net \
|
||||
--strip-native-commands \
|
||||
--no-header-files \
|
||||
--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
|
||||
|
||||
# load AppImageTool
|
||||
curl -L https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-${MACHINE_TYPE}.AppImage -o /tmp/appimagetool.AppImage
|
||||
curl -L https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-${CPU_ARCH}.AppImage -o /tmp/appimagetool.AppImage
|
||||
chmod +x /tmp/appimagetool.AppImage
|
||||
|
||||
# create AppImage
|
||||
/tmp/appimagetool.AppImage \
|
||||
Cryptomator.AppDir \
|
||||
cryptomator-${SEMVER_STR}-${MACHINE_TYPE}.AppImage \
|
||||
-u 'gh-releases-zsync|cryptomator|cryptomator|latest|cryptomator-*-${MACHINE_TYPE}.AppImage.zsync'
|
||||
cryptomator-${SEMVER_STR}-${CPU_ARCH}.AppImage \
|
||||
-u 'gh-releases-zsync|cryptomator|cryptomator|latest|cryptomator-*-${CPU_ARCH}.AppImage.zsync'
|
||||
|
||||
echo ""
|
||||
echo "Done. AppImage successfully created: cryptomator-${SEMVER_STR}-${MACHINE_TYPE}.AppImage"
|
||||
echo "Done. AppImage successfully created: cryptomator-${SEMVER_STR}-${CPU_ARCH}.AppImage"
|
||||
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 ""
|
||||
|
||||
@@ -53,6 +53,11 @@
|
||||
</screenshot>
|
||||
</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="bugtracker">https://github.com/cryptomator/cryptomator/issues/</url>
|
||||
<url type="donation">https://cryptomator.org/donate</url>
|
||||
@@ -70,6 +75,9 @@
|
||||
</content_rating>
|
||||
|
||||
<releases>
|
||||
<release date="2024-06-26" version="1.13.0">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.13.0</url>
|
||||
</release>
|
||||
<release date="2024-03-27" version="1.12.4">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.12.4</url>
|
||||
</release>
|
||||
|
||||
2
dist/linux/debian/control
vendored
2
dist/linux/debian/control
vendored
@@ -2,7 +2,7 @@ Source: cryptomator
|
||||
Maintainer: Cryptobot <releases@cryptomator.org>
|
||||
Section: utils
|
||||
Priority: optional
|
||||
Build-Depends: debhelper (>=10), coffeelibs-jdk-21 (>= 21.0.2+12-0ppa1), libgtk-3-0, libxxf86vm1, libgl1
|
||||
Build-Depends: debhelper (>=10), coffeelibs-jdk-22 (>= 22.0.1+8-0ppa1), libgtk-3-0, libxxf86vm1, libgl1
|
||||
Standards-Version: 4.5.0
|
||||
Homepage: https://cryptomator.org
|
||||
Vcs-Git: https://github.com/cryptomator/cryptomator.git
|
||||
|
||||
4
dist/linux/debian/rules
vendored
4
dist/linux/debian/rules
vendored
@@ -4,7 +4,7 @@
|
||||
# Uncomment this to turn on verbose mode.
|
||||
#export DH_VERBOSE=1
|
||||
|
||||
JAVA_HOME = /usr/lib/jvm/java-21-coffeelibs
|
||||
JAVA_HOME = /usr/lib/jvm/java-22-coffeelibs
|
||||
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
|
||||
ifeq ($(DEB_BUILD_ARCH),amd64)
|
||||
JMODS_PATH = jmods/amd64:${JAVA_HOME}/jmods
|
||||
@@ -28,7 +28,7 @@ override_dh_auto_build:
|
||||
$(JAVA_HOME)/bin/jlink \
|
||||
--output runtime \
|
||||
--module-path "${JMODS_PATH}" \
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net \
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net \
|
||||
--strip-native-commands \
|
||||
--no-header-files \
|
||||
--no-man-pages \
|
||||
|
||||
6
dist/mac/dmg/.gitignore
vendored
6
dist/mac/dmg/.gitignore
vendored
@@ -1,6 +1,8 @@
|
||||
# created during build
|
||||
# downloaded/created during build
|
||||
Cryptomator.app/
|
||||
runtime/
|
||||
dmg/
|
||||
*.dmg
|
||||
license.rtf
|
||||
license.rtf
|
||||
openjfx-jmods.zip
|
||||
*.jmod
|
||||
21
dist/mac/dmg/build.sh
vendored
21
dist/mac/dmg/build.sh
vendored
@@ -29,13 +29,17 @@ REVISION_NO=`git rev-list --count HEAD`
|
||||
VERSION_NO=`mvn -f../../../pom.xml help:evaluate -Dexpression=project.version -q -DforceStdout | sed -rn 's/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/p'`
|
||||
FUSE_LIB="FUSE-T"
|
||||
|
||||
ARCH="undefined"
|
||||
JAVAFX_VERISON=22.0.1
|
||||
JAVAFX_ARCH="undefined"
|
||||
JAVAFX_JMODS_SHA256="undefined"
|
||||
if [ "$(machine)" = "arm64e" ]; then
|
||||
ARCH="aarch64"
|
||||
JAVAFX_ARCH="aarch64"
|
||||
JAVAFX_JMODS_SHA256="572fce94b9b09d316b960a49e3c2b5d35231ed0463e3b1c4020b8de89783b51d"
|
||||
else
|
||||
ARCH="x64"
|
||||
JAVAFX_ARCH="x64"
|
||||
JAVAFX_JMODS_SHA256="e07a11c112abbdebe7c058b44c151e1e475de748671d896aef3d73f32453c248"
|
||||
fi
|
||||
OPENJFX_JMODS="https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_osx-${ARCH}_bin-jmods.zip"
|
||||
JAVAFX_JMODS_URL="https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-${JAVAFX_VERSION}_osx-${JAVAFX_ARCH}_bin-jmods.zip"
|
||||
|
||||
# check preconditions
|
||||
if [ -z "${JAVA_HOME}" ]; then echo "JAVA_HOME not set. Run using JAVA_HOME=/path/to/jdk ./build.sh"; exit 1; fi
|
||||
@@ -47,7 +51,8 @@ if [ -n "${CODESIGN_IDENTITY}" ]; then
|
||||
fi
|
||||
|
||||
# download and check jmods
|
||||
curl -L ${OPENJFX_JMODS} -o openjfx-jmods.zip
|
||||
curl -L ${JAVAFX_JMODS_URL} -o openjfx-jmods.zip
|
||||
echo "${JAVAFX_JMODS_SHA256} openjfx-jmods.zip" | shasum -a256 --check
|
||||
mkdir -p openjfx-jmods/
|
||||
unzip -jo openjfx-jmods.zip \*/javafx.base.jmod \*/javafx.controls.jmod \*/javafx.fxml.jmod \*/javafx.graphics.jmod -d openjfx-jmods
|
||||
JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
|
||||
@@ -63,7 +68,7 @@ if [ "${POM_JFX_VERSION}" -ne "${JMOD_VERSION}" ]; then
|
||||
fi
|
||||
|
||||
# compile
|
||||
mvn -B -f../../../pom.xml clean package -DskipTests -Pmac
|
||||
mvn -B -Djavafx.platform=mac -f../../../pom.xml clean package -DskipTests -Pmac
|
||||
cp ../../../LICENSE.txt ../../../target
|
||||
cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods
|
||||
|
||||
@@ -71,7 +76,7 @@ cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods
|
||||
${JAVA_HOME}/bin/jlink \
|
||||
--output runtime \
|
||||
--module-path "${JAVA_HOME}/jmods:openjfx-jmods" \
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr \
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.security.auth,jdk.accessibility,jdk.management.jfr \
|
||||
--strip-native-commands \
|
||||
--no-header-files \
|
||||
--no-man-pages \
|
||||
@@ -118,7 +123,7 @@ sed -i '' "s|###BUNDLE_SHORT_VERSION_STRING###|${VERSION_NO}|g" ${APP_NAME}.app/
|
||||
sed -i '' "s|###BUNDLE_VERSION###|${REVISION_NO}|g" ${APP_NAME}.app/Contents/Info.plist
|
||||
|
||||
# generate license
|
||||
mvn -B -f../../../pom.xml license:add-third-party \
|
||||
mvn -B -Djavafx.platform=mac -f../../../pom.xml license:add-third-party \
|
||||
-Dlicense.thirdPartyFilename=license.rtf \
|
||||
-Dlicense.outputDirectory=dist/mac/dmg/resources \
|
||||
-Dlicense.fileTemplate=resources/licenseTemplate.ftl \
|
||||
|
||||
1
dist/win/.gitignore
vendored
1
dist/win/.gitignore
vendored
@@ -6,4 +6,5 @@ installer
|
||||
*.msi
|
||||
*.exe
|
||||
*.jmod
|
||||
resources/jfxJmods.zip
|
||||
license.rtf
|
||||
31
dist/win/build.ps1
vendored
31
dist/win/build.ps1
vendored
@@ -41,7 +41,7 @@ Write-Output "`$Env:JAVA_HOME=$Env:JAVA_HOME"
|
||||
$copyright = "(C) $CopyrightStartYear - $((Get-Date).Year) $Vendor"
|
||||
|
||||
# compile
|
||||
&mvn -B -f $buildDir/../../pom.xml clean package -DskipTests -Pwin
|
||||
&mvn -B -f $buildDir/../../pom.xml clean package -DskipTests -Pwin -Djavafx.platform=win
|
||||
Copy-Item "$buildDir\..\..\target\$MainJarGlob.jar" -Destination "$buildDir\..\..\target\mods"
|
||||
|
||||
# add runtime
|
||||
@@ -51,21 +51,22 @@ if ($clean -and (Test-Path -Path $runtimeImagePath)) {
|
||||
}
|
||||
|
||||
## download jfx jmods
|
||||
$jmodsVersion='21.0.1'
|
||||
$jmodsUrl = "https://download2.gluonhq.com/openjfx/${jmodsVersion}/openjfx-${jmodsVersion}_windows-x64_bin-jmods.zip"
|
||||
$jfxJmodsChecksum = 'daf8acae631c016c24cfe23f88469400274d3441dd890615a42dfb501f3eb94a'
|
||||
$jfxJmodsZip = '.\resources\jfxJmods.zip'
|
||||
if( !(Test-Path -Path $jfxJmodsZip) ) {
|
||||
Write-Output "Downloading ${jmodsUrl}..."
|
||||
Invoke-WebRequest $jmodsUrl -OutFile $jfxJmodsZip # redirects are followed by default
|
||||
$javaFxVersion='22.0.1'
|
||||
$javaFxJmodsUrl = "https://download2.gluonhq.com/openjfx/${javaFxVersion}/openjfx-${javaFxVersion}_windows-x64_bin-jmods.zip"
|
||||
$javaFxJmodsSHA256 = 'de82e53179032a49bec005deb4438e8f261d08c4b58864a5c17e1d87286b09dd'
|
||||
$javaFxJmods = '.\resources\jfxJmods.zip'
|
||||
if( !(Test-Path -Path $javaFxJmods) ) {
|
||||
Write-Output "Downloading ${javaFxJmodsUrl}..."
|
||||
Invoke-WebRequest $javaFxJmodsUrl -OutFile $javaFxJmods # redirects are followed by default
|
||||
}
|
||||
|
||||
$jmodsChecksumActual = $(Get-FileHash -Path $jfxJmodsZip -Algorithm SHA256).Hash
|
||||
if( $jmodsChecksumActual -ne $jfxJmodsChecksum ) {
|
||||
Write-Error "Checksum mismatch for jfxJmods.zip. Expected: $jfxJmodsChecksum, actual: $jmodsChecksumActual"
|
||||
$jmodsChecksumActual = $(Get-FileHash -Path $javaFxJmods -Algorithm SHA256).Hash
|
||||
if( $jmodsChecksumActual -ne $javaFxJmodsSHA256 ) {
|
||||
Write-Error "Checksum mismatch for jfxJmods.zip. Expected: $javaFxJmodsSHA256
|
||||
, actual: $jmodsChecksumActual"
|
||||
exit 1;
|
||||
}
|
||||
Expand-Archive -Path $jfxJmodsZip -Force -DestinationPath ".\resources\"
|
||||
Expand-Archive -Path $javaFxJmods -Force -DestinationPath ".\resources\"
|
||||
Remove-Item -Recurse -Force -Path ".\resources\javafx-jmods"
|
||||
Move-Item -Force -Path ".\resources\javafx-jmods-*" -Destination ".\resources\javafx-jmods" -ErrorAction Stop
|
||||
|
||||
@@ -74,7 +75,7 @@ Move-Item -Force -Path ".\resources\javafx-jmods-*" -Destination ".\resources\ja
|
||||
--verbose `
|
||||
--output runtime `
|
||||
--module-path "$Env:JAVA_HOME/jmods;$buildDir/resources/javafx-jmods" `
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr,javafx.base,javafx.graphics,javafx.controls,javafx.fxml `
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.accessibility,jdk.management.jfr,javafx.base,javafx.graphics,javafx.controls,javafx.fxml `
|
||||
--strip-native-commands `
|
||||
--no-header-files `
|
||||
--no-man-pages `
|
||||
@@ -121,7 +122,7 @@ if ($clean -and (Test-Path -Path $appPath)) {
|
||||
--icon resources/$AppName.ico
|
||||
|
||||
#Create RTF license for msi
|
||||
&mvn -B -f $buildDir/../../pom.xml license:add-third-party `
|
||||
&mvn -B -f $buildDir/../../pom.xml license:add-third-party -Djavafx.platform=win `
|
||||
"-Dlicense.thirdPartyFilename=license.rtf" `
|
||||
"-Dlicense.fileTemplate=$buildDir\resources\licenseTemplate.ftl" `
|
||||
"-Dlicense.outputDirectory=$buildDir\resources\" `
|
||||
@@ -166,7 +167,7 @@ $Env:JP_WIXHELPER_DIR = "."
|
||||
--file-associations resources/FAvaultFile.properties
|
||||
|
||||
#Create RTF license for bundle
|
||||
&mvn -B -f $buildDir/../../pom.xml license:add-third-party `
|
||||
&mvn -B -f $buildDir/../../pom.xml license:add-third-party -Djavafx.platform=win `
|
||||
"-Dlicense.thirdPartyFilename=license.rtf" `
|
||||
"-Dlicense.fileTemplate=$buildDir\bundle\resources\licenseTemplate.ftl" `
|
||||
"-Dlicense.outputDirectory=$buildDir\bundle\resources\" `
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
@echo off
|
||||
:: see comments in file ./version170-migrate-settings.ps1
|
||||
|
||||
cd %~dp0
|
||||
powershell -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned -Command .\version170-migrate-settings.ps1
|
||||
35
dist/win/contrib/version170-migrate-settings.ps1
vendored
35
dist/win/contrib/version170-migrate-settings.ps1
vendored
@@ -1,35 +0,0 @@
|
||||
# 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
|
||||
}
|
||||
}
|
||||
6
dist/win/resources/main.wxs
vendored
6
dist/win/resources/main.wxs
vendored
@@ -139,11 +139,6 @@
|
||||
Sequence="execute" Before="PatchWebDAV" />
|
||||
<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 -->
|
||||
<Property Id="FOUNDRUNNINGAPP" Admin="yes"/>
|
||||
<util:CloseApplication
|
||||
@@ -195,7 +190,6 @@
|
||||
<RemoveExistingProducts After="InstallValidate"/> <!-- Moved from CostInitialize, due to WixCloseApplications -->
|
||||
|
||||
<Custom Action="PatchWebDAV" After="InstallFiles">NOT Installed OR REINSTALL</Custom>
|
||||
<Custom Action="V170MigrateSettings" After="InstallFiles">NOT Installed OR REINSTALL</Custom>
|
||||
</InstallExecuteSequence>
|
||||
|
||||
<InstallUISequence>
|
||||
|
||||
56
pom.xml
56
pom.xml
@@ -3,7 +3,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>cryptomator</artifactId>
|
||||
<version>1.12.4</version>
|
||||
<version>1.13.0</version>
|
||||
<name>Cryptomator Desktop App</name>
|
||||
|
||||
<organization>
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.jdk.version>21</project.jdk.version>
|
||||
<project.jdk.version>22</project.jdk.version>
|
||||
|
||||
<!-- 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) -->
|
||||
@@ -36,46 +36,50 @@
|
||||
<cryptomator.cryptofs.version>2.6.9</cryptomator.cryptofs.version>
|
||||
<cryptomator.integrations.version>1.3.1</cryptomator.integrations.version>
|
||||
<cryptomator.integrations.win.version>1.2.5</cryptomator.integrations.win.version>
|
||||
<cryptomator.integrations.mac.version>1.2.3</cryptomator.integrations.mac.version>
|
||||
<cryptomator.integrations.linux.version>1.4.4</cryptomator.integrations.linux.version>
|
||||
<cryptomator.fuse.version>4.0.0</cryptomator.fuse.version>
|
||||
<cryptomator.dokany.version>2.0.0</cryptomator.dokany.version>
|
||||
<cryptomator.integrations.mac.version>1.2.4</cryptomator.integrations.mac.version>
|
||||
<cryptomator.integrations.linux.version>1.4.5</cryptomator.integrations.linux.version>
|
||||
<cryptomator.fuse.version>5.0.0</cryptomator.fuse.version>
|
||||
<cryptomator.webdav.version>2.0.6</cryptomator.webdav.version>
|
||||
|
||||
<!-- 3rd party dependencies -->
|
||||
<commons-lang3.version>3.14.0</commons-lang3.version>
|
||||
<dagger.version>2.50</dagger.version>
|
||||
<dagger.version>2.51.1</dagger.version>
|
||||
<easybind.version>2.2</easybind.version>
|
||||
<guava.version>33.0.0-jre</guava.version>
|
||||
<jackson.version>2.16.1</jackson.version>
|
||||
<javafx.version>21.0.1</javafx.version>
|
||||
<guava.version>33.2.1-jre</guava.version>
|
||||
<jackson.version>2.17.1</jackson.version>
|
||||
<javafx.version>22.0.1</javafx.version>
|
||||
<jwt.version>4.4.0</jwt.version>
|
||||
<nimbus-jose.version>9.37.3</nimbus-jose.version>
|
||||
<logback.version>1.5.0</logback.version>
|
||||
<slf4j.version>2.0.12</slf4j.version>
|
||||
<logback.version>1.5.6</logback.version>
|
||||
<slf4j.version>2.0.13</slf4j.version>
|
||||
<tinyoauth2.version>0.8.0</tinyoauth2.version>
|
||||
<zxcvbn.version>1.8.2</zxcvbn.version>
|
||||
<zxcvbn.version>1.9.0</zxcvbn.version>
|
||||
|
||||
<!-- test dependencies -->
|
||||
<junit.jupiter.version>5.10.2</junit.jupiter.version>
|
||||
<mockito.version>5.10.0</mockito.version>
|
||||
<mockito.version>5.12.0</mockito.version>
|
||||
<hamcrest.version>2.2</hamcrest.version>
|
||||
|
||||
<!-- build-time dependencies -->
|
||||
<jetbrains.annotations.version>24.1.0</jetbrains.annotations.version>
|
||||
<dependency-check.version>9.0.9</dependency-check.version>
|
||||
<jacoco.version>0.8.11</jacoco.version>
|
||||
<dependency-check.version>9.2.0</dependency-check.version>
|
||||
<jacoco.version>0.8.12</jacoco.version>
|
||||
<license-generator.version>2.4.0</license-generator.version>
|
||||
<junit-tree-reporter.version>1.2.1</junit-tree-reporter.version>
|
||||
<mvn-compiler.version>3.12.1</mvn-compiler.version>
|
||||
<mvn-compiler.version>3.13.0</mvn-compiler.version>
|
||||
<mvn-resources.version>3.3.1</mvn-resources.version>
|
||||
<mvn-dependency.version>3.6.1</mvn-dependency.version>
|
||||
<mvn-surefire.version>3.2.5</mvn-surefire.version>
|
||||
<mvn-jar.version>3.3.0</mvn-jar.version>
|
||||
<mvn-dependency.version>3.7.0</mvn-dependency.version>
|
||||
<mvn-surefire.version>3.3.0</mvn-surefire.version>
|
||||
<mvn-jar.version>3.4.1</mvn-jar.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<!-- Cryptomator Libs -->
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>cryptolib</artifactId>
|
||||
<version>2.2.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>cryptofs</artifactId>
|
||||
@@ -86,11 +90,6 @@
|
||||
<artifactId>fuse-nio-adapter</artifactId>
|
||||
<version>${cryptomator.fuse.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>dokany-nio-adapter</artifactId>
|
||||
<version>${cryptomator.dokany.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>webdav-nio-adapter</artifactId>
|
||||
@@ -164,11 +163,18 @@
|
||||
<artifactId>nimbus-jose-jwt</artifactId>
|
||||
<version>${nimbus-jose.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Jackson -->
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>${jackson.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||
<artifactId>jackson-datatype-jsr310</artifactId>
|
||||
<version>${jackson.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- EasyBind -->
|
||||
<dependency>
|
||||
|
||||
@@ -21,7 +21,6 @@ open module org.cryptomator.desktop {
|
||||
|
||||
requires org.cryptomator.cryptolib;
|
||||
requires org.cryptomator.cryptofs;
|
||||
requires org.cryptomator.frontend.dokany;
|
||||
requires org.cryptomator.frontend.fuse;
|
||||
requires org.cryptomator.frontend.webdav;
|
||||
requires org.cryptomator.integrations.api;
|
||||
@@ -32,13 +31,13 @@ open module org.cryptomator.desktop {
|
||||
requires javafx.graphics;
|
||||
requires javafx.controls;
|
||||
requires javafx.fxml;
|
||||
requires jdk.crypto.ec;
|
||||
// 3rd party:
|
||||
requires ch.qos.logback.classic;
|
||||
requires ch.qos.logback.core;
|
||||
requires com.auth0.jwt;
|
||||
requires com.google.common;
|
||||
requires com.fasterxml.jackson.databind;
|
||||
requires com.fasterxml.jackson.datatype.jsr310;
|
||||
requires com.nimbusds.jose.jwt;
|
||||
requires com.nulabinc.zxcvbn;
|
||||
requires com.tobiasdiez.easybind;
|
||||
|
||||
@@ -5,6 +5,7 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class SubstitutingProperties extends PropertiesDecorator {
|
||||
@@ -58,7 +59,7 @@ public class SubstitutingProperties extends PropertiesDecorator {
|
||||
LoggerFactory.getLogger(SubstitutingProperties.class).warn("Variable {} used for substitution not found in {}. Replaced with empty string.", key, src);
|
||||
return "";
|
||||
} else {
|
||||
return val.replace("\\", "\\\\");
|
||||
return Matcher.quoteReplacement(val);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ import javafx.beans.property.StringProperty;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.geometry.NodeOrientation;
|
||||
import java.time.Instant;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class Settings {
|
||||
@@ -44,8 +45,7 @@ public class Settings {
|
||||
static final String DEFAULT_KEYCHAIN_PROVIDER = SystemUtils.IS_OS_WINDOWS ? "org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess" : SystemUtils.IS_OS_MAC ? "org.cryptomator.macos.keychain.MacSystemKeychainAccess" : "org.cryptomator.linux.keychain.SecretServiceKeychainAccess";
|
||||
static final String DEFAULT_USER_INTERFACE_ORIENTATION = NodeOrientation.LEFT_TO_RIGHT.name();
|
||||
static final boolean DEFAULT_SHOW_MINIMIZE_BUTTON = false;
|
||||
static final String DEFAULT_LAST_UPDATE_CHECK = "2000-01-01";
|
||||
|
||||
public static final Instant DEFAULT_TIMESTAMP = Instant.parse("2000-01-01T00:00:00Z");
|
||||
public final ObservableList<VaultSettings> directories;
|
||||
public final BooleanProperty askedForUpdateCheck;
|
||||
public final BooleanProperty checkForUpdates;
|
||||
@@ -67,7 +67,7 @@ public class Settings {
|
||||
public final IntegerProperty windowHeight;
|
||||
public final StringProperty language;
|
||||
public final StringProperty mountService;
|
||||
public final StringProperty lastUpdateCheck;
|
||||
public final ObjectProperty<Instant> lastSuccessfulUpdateCheck;
|
||||
|
||||
private Consumer<Settings> saveCmd;
|
||||
|
||||
@@ -104,7 +104,7 @@ public class Settings {
|
||||
this.windowHeight = new SimpleIntegerProperty(this, "windowHeight", json.windowHeight);
|
||||
this.language = new SimpleStringProperty(this, "language", json.language);
|
||||
this.mountService = new SimpleStringProperty(this, "mountService", json.mountService);
|
||||
this.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());
|
||||
|
||||
@@ -131,7 +131,7 @@ public class Settings {
|
||||
windowHeight.addListener(this::somethingChanged);
|
||||
language.addListener(this::somethingChanged);
|
||||
mountService.addListener(this::somethingChanged);
|
||||
lastUpdateCheck.addListener(this::somethingChanged);
|
||||
lastSuccessfulUpdateCheck.addListener(this::somethingChanged);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@@ -185,7 +185,7 @@ public class Settings {
|
||||
json.windowHeight = windowHeight.get();
|
||||
json.language = language.get();
|
||||
json.mountService = mountService.get();
|
||||
json.lastUpdateCheck = lastUpdateCheck.get();
|
||||
json.lastSuccessfulUpdateCheck = lastSuccessfulUpdateCheck.get();
|
||||
return json;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package org.cryptomator.common.settings;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
@@ -80,7 +82,8 @@ 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
|
||||
String preferredVolumeImpl;
|
||||
|
||||
@JsonProperty("lastUpdateCheck")
|
||||
String lastUpdateCheck = Settings.DEFAULT_LAST_UPDATE_CHECK;
|
||||
@JsonProperty("lastSuccessfulUpdateCheck")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'", timezone = "UTC")
|
||||
Instant lastSuccessfulUpdateCheck = Settings.DEFAULT_TIMESTAMP;
|
||||
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ package org.cryptomator.common.settings;
|
||||
|
||||
import com.fasterxml.jackson.core.JacksonException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
import com.google.common.base.Suppliers;
|
||||
import org.cryptomator.common.Environment;
|
||||
import org.slf4j.Logger;
|
||||
@@ -36,7 +37,7 @@ import java.util.stream.Stream;
|
||||
@Singleton
|
||||
public class SettingsProvider implements Supplier<Settings> {
|
||||
|
||||
private static final ObjectMapper JSON = new ObjectMapper().setDefaultLeniency(true);
|
||||
private static final ObjectMapper JSON = new ObjectMapper().setDefaultLeniency(true).registerModule(new JavaTimeModule());
|
||||
private static final Logger LOG = LoggerFactory.getLogger(SettingsProvider.class);
|
||||
private static final long SAVE_DELAY_MS = 1000;
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ public enum FxmlFile {
|
||||
CONVERTVAULT_HUBTOPASSWORD_START("/fxml/convertvault_hubtopassword_start.fxml"), //
|
||||
CONVERTVAULT_HUBTOPASSWORD_CONVERT("/fxml/convertvault_hubtopassword_convert.fxml"), //
|
||||
CONVERTVAULT_HUBTOPASSWORD_SUCCESS("/fxml/convertvault_hubtopassword_success.fxml"), //
|
||||
DOKANY_SUPPORT_END("/fxml/dokany_support_end.fxml"), //
|
||||
ERROR("/fxml/error.fxml"), //
|
||||
FORGET_PASSWORD("/fxml/forget_password.fxml"), //
|
||||
HEALTH_START("/fxml/health_start.fxml"), //
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
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);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
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 {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
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,6 +3,7 @@ package org.cryptomator.ui.fxapp;
|
||||
import dagger.Lazy;
|
||||
import org.cryptomator.common.Environment;
|
||||
import org.cryptomator.common.settings.Settings;
|
||||
import org.cryptomator.common.settings.VaultSettings;
|
||||
import org.cryptomator.ui.traymenu.TrayMenuComponent;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -75,7 +76,27 @@ public class FxApplication {
|
||||
appWindows.checkAndShowUpdateReminderWindow();
|
||||
}
|
||||
|
||||
migrateAndInformDokanyRemoval();
|
||||
|
||||
launchEventHandler.startHandlingLaunchEvents();
|
||||
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,6 +7,7 @@ package org.cryptomator.ui.fxapp;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import org.cryptomator.ui.dokanysupportend.DokanySupportEndComponent;
|
||||
import org.cryptomator.ui.error.ErrorComponent;
|
||||
import org.cryptomator.ui.health.HealthCheckComponent;
|
||||
import org.cryptomator.ui.lock.LockComponent;
|
||||
@@ -33,6 +34,7 @@ import java.io.InputStream;
|
||||
ErrorComponent.class, //
|
||||
HealthCheckComponent.class, //
|
||||
UpdateReminderComponent.class, //
|
||||
DokanySupportEndComponent.class, //
|
||||
ShareVaultComponent.class})
|
||||
abstract class FxApplicationModule {
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import dagger.Lazy;
|
||||
import org.cryptomator.common.vaults.Vault;
|
||||
import org.cryptomator.common.vaults.VaultState;
|
||||
import org.cryptomator.integrations.tray.TrayIntegrationProvider;
|
||||
import org.cryptomator.ui.dokanysupportend.DokanySupportEndComponent;
|
||||
import org.cryptomator.ui.error.ErrorComponent;
|
||||
import org.cryptomator.ui.lock.LockComponent;
|
||||
import org.cryptomator.ui.mainwindow.MainWindowComponent;
|
||||
@@ -48,6 +49,7 @@ public class FxApplicationWindows {
|
||||
private final QuitComponent.Builder quitWindowBuilder;
|
||||
private final UnlockComponent.Factory unlockWorkflowFactory;
|
||||
private final UpdateReminderComponent.Factory updateReminderWindowBuilder;
|
||||
private final DokanySupportEndComponent.Factory dokanySupportEndWindowBuilder;
|
||||
private final LockComponent.Factory lockWorkflowFactory;
|
||||
private final ErrorComponent.Factory errorWindowFactory;
|
||||
private final ExecutorService executor;
|
||||
@@ -56,13 +58,14 @@ public class FxApplicationWindows {
|
||||
private final FilteredList<Window> visibleWindows;
|
||||
|
||||
@Inject
|
||||
public FxApplicationWindows(@PrimaryStage Stage primaryStage,
|
||||
public FxApplicationWindows(@PrimaryStage Stage primaryStage, //
|
||||
Optional<TrayIntegrationProvider> trayIntegration, //
|
||||
Lazy<MainWindowComponent> mainWindow, //
|
||||
Lazy<PreferencesComponent> preferencesWindow, //
|
||||
QuitComponent.Builder quitWindowBuilder, //
|
||||
UnlockComponent.Factory unlockWorkflowFactory, //
|
||||
UpdateReminderComponent.Factory updateReminderWindowBuilder, //
|
||||
DokanySupportEndComponent.Factory dokanySupportEndWindowBuilder, //
|
||||
LockComponent.Factory lockWorkflowFactory, //
|
||||
ErrorComponent.Factory errorWindowFactory, //
|
||||
VaultOptionsComponent.Factory vaultOptionsWindow, //
|
||||
@@ -75,6 +78,7 @@ public class FxApplicationWindows {
|
||||
this.quitWindowBuilder = quitWindowBuilder;
|
||||
this.unlockWorkflowFactory = unlockWorkflowFactory;
|
||||
this.updateReminderWindowBuilder = updateReminderWindowBuilder;
|
||||
this.dokanySupportEndWindowBuilder = dokanySupportEndWindowBuilder;
|
||||
this.lockWorkflowFactory = lockWorkflowFactory;
|
||||
this.errorWindowFactory = errorWindowFactory;
|
||||
this.executor = executor;
|
||||
@@ -142,6 +146,11 @@ public class FxApplicationWindows {
|
||||
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) {
|
||||
return CompletableFuture.supplyAsync(() -> {
|
||||
Preconditions.checkState(vault.stateProperty().transition(VaultState.Value.LOCKED, VaultState.Value.PROCESSING), "Vault not locked.");
|
||||
|
||||
@@ -1,45 +1,57 @@
|
||||
package org.cryptomator.ui.fxapp;
|
||||
|
||||
import org.cryptomator.common.Environment;
|
||||
import org.cryptomator.common.SemVerComparator;
|
||||
import org.cryptomator.common.settings.Settings;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.binding.BooleanBinding;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
import javafx.beans.property.ReadOnlyStringProperty;
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.concurrent.ScheduledService;
|
||||
import javafx.concurrent.Worker;
|
||||
import javafx.concurrent.WorkerStateEvent;
|
||||
import javafx.util.Duration;
|
||||
import java.time.Instant;
|
||||
import java.util.Comparator;
|
||||
|
||||
@FxApplicationScoped
|
||||
public class UpdateChecker {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(UpdateChecker.class);
|
||||
private static final Duration AUTOCHECK_DELAY = Duration.seconds(5);
|
||||
private static final Duration AUTO_CHECK_DELAY = Duration.seconds(5);
|
||||
|
||||
private final Environment env;
|
||||
private final Settings settings;
|
||||
private final StringProperty latestVersionProperty;
|
||||
private final Comparator<String> semVerComparator;
|
||||
private final StringProperty latestVersion = new SimpleStringProperty();
|
||||
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
|
||||
UpdateChecker(Settings settings, Environment env, @Named("latestVersion") StringProperty latestVersionProperty, @Named("SemVer") Comparator<String> semVerComparator, ScheduledService<String> updateCheckerService) {
|
||||
UpdateChecker(Settings settings, //
|
||||
Environment env, //
|
||||
ScheduledService<String> updateCheckerService) {
|
||||
this.env = env;
|
||||
this.settings = settings;
|
||||
this.latestVersionProperty = latestVersionProperty;
|
||||
this.semVerComparator = semVerComparator;
|
||||
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() {
|
||||
if (!env.disableUpdateCheck() && settings.checkForUpdates.get()) {
|
||||
startCheckingForUpdates(AUTOCHECK_DELAY);
|
||||
startCheckingForUpdates(AUTO_CHECK_DELAY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,36 +71,65 @@ public class UpdateChecker {
|
||||
|
||||
private void checkStarted(WorkerStateEvent event) {
|
||||
LOG.debug("Checking for updates...");
|
||||
state.set(UpdateCheckState.IS_CHECKING);
|
||||
}
|
||||
|
||||
private void checkSucceeded(WorkerStateEvent event) {
|
||||
String latestVersion = updateCheckerService.getValue();
|
||||
LOG.info("Current version: {}, lastest version: {}", getCurrentVersion(), latestVersion);
|
||||
|
||||
if (semVerComparator.compare(getCurrentVersion(), latestVersion) < 0) {
|
||||
// update is available
|
||||
latestVersionProperty.set(latestVersion);
|
||||
} else {
|
||||
latestVersionProperty.set(null);
|
||||
}
|
||||
var latestVersionString = updateCheckerService.getValue();
|
||||
LOG.info("Current version: {}, latest version: {}", getCurrentVersion(), latestVersionString);
|
||||
lastSuccessfulUpdateCheck.set(Instant.now());
|
||||
latestVersion.set(latestVersionString);
|
||||
state.set(UpdateCheckState.CHECK_SUCCESSFUL);
|
||||
}
|
||||
|
||||
private void checkFailed(WorkerStateEvent event) {
|
||||
LOG.warn("Error checking for updates", event.getSource().getException());
|
||||
state.set(UpdateCheckState.CHECK_FAILED);
|
||||
}
|
||||
|
||||
public enum UpdateCheckState {
|
||||
NOT_CHECKED,
|
||||
IS_CHECKING,
|
||||
CHECK_SUCCESSFUL,
|
||||
CHECK_FAILED;
|
||||
}
|
||||
|
||||
/* Observable Properties */
|
||||
|
||||
public BooleanBinding checkingForUpdatesProperty() {
|
||||
return updateCheckerService.stateProperty().isEqualTo(Worker.State.RUNNING);
|
||||
}
|
||||
|
||||
public ReadOnlyStringProperty latestVersionProperty() {
|
||||
return latestVersionProperty;
|
||||
return latestVersion;
|
||||
}
|
||||
|
||||
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() {
|
||||
return env.getAppVersion();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,8 +11,6 @@ import org.slf4j.LoggerFactory;
|
||||
import javax.inject.Named;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.binding.ObjectBinding;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.concurrent.ScheduledService;
|
||||
import javafx.concurrent.Task;
|
||||
import javafx.util.Duration;
|
||||
@@ -32,13 +30,6 @@ public abstract class UpdateCheckerModule {
|
||||
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...
|
||||
|
||||
@Provides
|
||||
@Named("latestVersion")
|
||||
@FxApplicationScoped
|
||||
static StringProperty provideLatestVersion() {
|
||||
return new SimpleStringProperty();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@FxApplicationScoped
|
||||
static Optional<HttpClient> provideHttpClient() {
|
||||
|
||||
@@ -46,7 +46,7 @@ public class MainWindowTitleController implements FxController {
|
||||
this.appWindows = appWindows;
|
||||
this.trayMenuInitialized = trayMenu.isInitialized();
|
||||
this.updateChecker = updateChecker;
|
||||
this.updateAvailable = updateChecker.latestVersionProperty().isNotNull();
|
||||
this.updateAvailable = updateChecker.updateAvailableProperty();
|
||||
this.licenseHolder = licenseHolder;
|
||||
this.settings = settings;
|
||||
this.showMinimizeButton = Bindings.createBooleanBinding(this::isShowMinimizeButton, settings.showMinimizeButton, settings.showTrayIcon);
|
||||
|
||||
@@ -7,6 +7,7 @@ import org.cryptomator.cryptofs.CryptoFileSystemProvider;
|
||||
import org.cryptomator.cryptofs.DirStructure;
|
||||
import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.common.VaultService;
|
||||
import org.cryptomator.ui.fxapp.FxApplicationWindows;
|
||||
import org.cryptomator.ui.removevault.RemoveVaultComponent;
|
||||
import org.slf4j.Logger;
|
||||
@@ -58,6 +59,7 @@ public class VaultListController implements FxController {
|
||||
|
||||
private final Stage mainWindow;
|
||||
private final ObservableList<Vault> vaults;
|
||||
private final VaultService vaultService;
|
||||
private final ObjectProperty<Vault> selectedVault;
|
||||
private final VaultListCellFactory cellFactory;
|
||||
private final AddVaultWizardComponent.Builder addVaultWizard;
|
||||
@@ -79,6 +81,7 @@ public class VaultListController implements FxController {
|
||||
ObservableList<Vault> vaults, //
|
||||
ObjectProperty<Vault> selectedVault, //
|
||||
VaultListCellFactory cellFactory, //
|
||||
VaultService vaultService, //
|
||||
AddVaultWizardComponent.Builder addVaultWizard, //
|
||||
RemoveVaultComponent.Builder removeVaultDialogue, //
|
||||
VaultListManager vaultListManager, //
|
||||
@@ -88,6 +91,7 @@ public class VaultListController implements FxController {
|
||||
this.vaults = vaults;
|
||||
this.selectedVault = selectedVault;
|
||||
this.cellFactory = cellFactory;
|
||||
this.vaultService = vaultService;
|
||||
this.addVaultWizard = addVaultWizard;
|
||||
this.removeVaultDialogue = removeVaultDialogue;
|
||||
this.vaultListManager = vaultListManager;
|
||||
@@ -119,6 +123,9 @@ public class VaultListController implements FxController {
|
||||
Optional.ofNullable(selectedVault.get())
|
||||
.filter(Vault::isLocked)
|
||||
.ifPresent(vault -> appWindows.startUnlockWorkflow(vault, mainWindow));
|
||||
Optional.ofNullable(selectedVault.get())
|
||||
.filter(Vault::isUnlocked)
|
||||
.ifPresent(vaultService::reveal);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -1,18 +1,33 @@
|
||||
package org.cryptomator.ui.preferences;
|
||||
|
||||
import org.cryptomator.common.Environment;
|
||||
import org.cryptomator.common.settings.Settings;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.fxapp.UpdateChecker;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javafx.animation.PauseTransition;
|
||||
import javafx.application.Application;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.binding.BooleanBinding;
|
||||
import javafx.beans.binding.ObjectBinding;
|
||||
import javafx.beans.binding.StringBinding;
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
import javafx.beans.property.ReadOnlyStringProperty;
|
||||
import javafx.beans.property.SimpleBooleanProperty;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.CheckBox;
|
||||
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
|
||||
public class UpdatesPreferencesController implements FxController {
|
||||
@@ -20,29 +35,55 @@ public class UpdatesPreferencesController implements FxController {
|
||||
private static final String DOWNLOADS_URI = "https://cryptomator.org/downloads";
|
||||
|
||||
private final Application application;
|
||||
private final Environment environment;
|
||||
private final ResourceBundle resourceBundle;
|
||||
private final Settings settings;
|
||||
private final UpdateChecker updateChecker;
|
||||
private final ObjectBinding<ContentDisplay> checkForUpdatesButtonState;
|
||||
private final ReadOnlyStringProperty latestVersion;
|
||||
private final ObservableValue<Instant> lastSuccessfulUpdateCheck;
|
||||
private final StringBinding lastUpdateCheckMessage;
|
||||
private final ObservableValue<String> timeDifferenceMessage;
|
||||
private final String currentVersion;
|
||||
private final BooleanBinding updateAvailable;
|
||||
private final BooleanBinding checkFailed;
|
||||
private final BooleanProperty upToDateLabelVisible = new SimpleBooleanProperty(false);
|
||||
private final DateTimeFormatter formatter;
|
||||
private final BooleanBinding upToDate;
|
||||
|
||||
/* FXML */
|
||||
public CheckBox checkForUpdatesCheckbox;
|
||||
|
||||
@Inject
|
||||
UpdatesPreferencesController(Application application, Settings settings, UpdateChecker updateChecker) {
|
||||
UpdatesPreferencesController(Application application, Environment environment, ResourceBundle resourceBundle, Settings settings, UpdateChecker updateChecker) {
|
||||
this.application = application;
|
||||
this.environment = environment;
|
||||
this.resourceBundle = resourceBundle;
|
||||
this.settings = settings;
|
||||
this.updateChecker = updateChecker;
|
||||
this.checkForUpdatesButtonState = Bindings.when(updateChecker.checkingForUpdatesProperty()).then(ContentDisplay.LEFT).otherwise(ContentDisplay.TEXT_ONLY);
|
||||
this.latestVersion = updateChecker.latestVersionProperty();
|
||||
this.updateAvailable = latestVersion.isNotNull();
|
||||
this.lastSuccessfulUpdateCheck = updateChecker.lastSuccessfulUpdateCheckProperty();
|
||||
this.timeDifferenceMessage = Bindings.createStringBinding(this::getTimeDifferenceMessage, lastSuccessfulUpdateCheck);
|
||||
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() {
|
||||
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
|
||||
@@ -55,6 +96,11 @@ public class UpdatesPreferencesController implements FxController {
|
||||
application.getHostServices().showDocument(DOWNLOADS_URI);
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void showLogfileDirectory() {
|
||||
environment.getLogDir().ifPresent(logDirPath -> application.getHostServices().showDocument(logDirPath.toUri().toString()));
|
||||
}
|
||||
|
||||
/* Observable Properties */
|
||||
|
||||
public ObjectBinding<ContentDisplay> checkForUpdatesButtonStateProperty() {
|
||||
@@ -77,6 +123,46 @@ public class UpdatesPreferencesController implements FxController {
|
||||
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() {
|
||||
return updateAvailable;
|
||||
}
|
||||
@@ -84,4 +170,13 @@ public class UpdatesPreferencesController implements FxController {
|
||||
public boolean isUpdateAvailable() {
|
||||
return updateAvailable.get();
|
||||
}
|
||||
|
||||
public BooleanBinding checkFailedProperty() {
|
||||
return checkFailed;
|
||||
}
|
||||
|
||||
public boolean isCheckFailed() {
|
||||
return checkFailed.getValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,7 +8,8 @@ import org.cryptomator.ui.common.FxmlScene;
|
||||
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Stage;
|
||||
import java.time.LocalDate;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
|
||||
@UpdateReminderScoped
|
||||
@Subcomponent(modules = {UpdateReminderModule.class})
|
||||
@@ -23,7 +24,8 @@ public interface UpdateReminderComponent {
|
||||
Settings settings();
|
||||
|
||||
default void checkAndShowUpdateReminderWindow() {
|
||||
if (LocalDate.parse(settings().lastUpdateCheck.get()).isBefore(LocalDate.now().minusDays(14)) && !settings().checkForUpdates.getValue()) {
|
||||
var now = Instant.now();
|
||||
if (!settings().checkForUpdates.getValue() && settings().lastSuccessfulUpdateCheck.get().isBefore(now.minus(Duration.ofDays(14)))) {
|
||||
Stage stage = window();
|
||||
stage.setScene(updateReminderScene().get());
|
||||
stage.sizeToScene();
|
||||
@@ -33,6 +35,7 @@ public interface UpdateReminderComponent {
|
||||
|
||||
@Subcomponent.Factory
|
||||
interface Factory {
|
||||
|
||||
UpdateReminderComponent create();
|
||||
}
|
||||
}
|
||||
@@ -7,8 +7,6 @@ import org.cryptomator.ui.fxapp.UpdateChecker;
|
||||
import javax.inject.Inject;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.stage.Stage;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
@UpdateReminderScoped
|
||||
public class UpdateReminderController implements FxController {
|
||||
@@ -27,20 +25,17 @@ public class UpdateReminderController implements FxController {
|
||||
|
||||
@FXML
|
||||
public void cancel() {
|
||||
settings.lastUpdateCheck.set(LocalDate.now().format(DateTimeFormatter.ISO_DATE));
|
||||
window.close();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void once() {
|
||||
settings.lastUpdateCheck.set(LocalDate.now().format(DateTimeFormatter.ISO_DATE));
|
||||
updateChecker.checkForUpdatesNow();
|
||||
window.close();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void automatically() {
|
||||
settings.lastUpdateCheck.set(LocalDate.now().format(DateTimeFormatter.ISO_DATE));
|
||||
updateChecker.checkForUpdatesNow();
|
||||
settings.checkForUpdates.set(true);
|
||||
window.close();
|
||||
|
||||
53
src/main/resources/fxml/dokany_support_end.fxml
Normal file
53
src/main/resources/fxml/dokany_support_end.fxml
Normal file
@@ -0,0 +1,53 @@
|
||||
<?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>
|
||||
@@ -1,13 +1,19 @@
|
||||
<?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.FormattedString?>
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.CheckBox?>
|
||||
<?import javafx.scene.control.Hyperlink?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import org.cryptomator.ui.controls.FontAwesome5Spinner?>
|
||||
<?import javafx.scene.control.Tooltip?>
|
||||
<?import javafx.scene.text.TextFlow?>
|
||||
<?import javafx.scene.text.Text?>
|
||||
<VBox xmlns:fx="http://javafx.com/fxml"
|
||||
xmlns="http://javafx.com/javafx"
|
||||
fx:controller="org.cryptomator.ui.preferences.UpdatesPreferencesController"
|
||||
@@ -18,19 +24,34 @@
|
||||
<padding>
|
||||
<Insets topRightBottomLeft="24"/>
|
||||
</padding>
|
||||
<children>
|
||||
<FormattedLabel format="%preferences.updates.currentVersion" arg1="${controller.currentVersion}" textAlignment="CENTER" wrapText="true"/>
|
||||
<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">
|
||||
<Button text="%preferences.updates.checkNowBtn" defaultButton="true" onAction="#checkNow" contentDisplay="${controller.checkForUpdatesButtonState}">
|
||||
<graphic>
|
||||
<FontAwesome5Spinner fx:id="spinner" glyphSize="12"/>
|
||||
</graphic>
|
||||
</Button>
|
||||
<VBox alignment="CENTER" spacing="12">
|
||||
<Button text="%preferences.updates.checkNowBtn" defaultButton="true" onAction="#checkNow" contentDisplay="${controller.checkForUpdatesButtonState}">
|
||||
<graphic>
|
||||
<FontAwesome5Spinner glyphSize="12"/>
|
||||
</graphic>
|
||||
</Button>
|
||||
|
||||
<Hyperlink text="${linkLabel.value}" onAction="#visitDownloadsPage" textAlignment="CENTER" wrapText="true" styleClass="hyperlink-underline" visible="${controller.updateAvailable}"/>
|
||||
</VBox>
|
||||
</children>
|
||||
<TextFlow styleClass="text-flow" textAlignment="CENTER" visible="${controller.checkFailed}" managed="${controller.checkFailed}">
|
||||
<FontAwesome5IconView glyphSize="12" styleClass="glyph-icon-orange" glyph="EXCLAMATION_TRIANGLE"/>
|
||||
<Text text=" "/>
|
||||
<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>
|
||||
|
||||
@@ -321,6 +321,14 @@ preferences.updates.currentVersion=Current Version: %s
|
||||
preferences.updates.autoUpdateCheck=Check for updates automatically
|
||||
preferences.updates.checkNowBtn=Check Now
|
||||
preferences.updates.updateAvailable=Update to version %s available.
|
||||
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
|
||||
preferences.contribute=Support Us
|
||||
preferences.contribute.registeredFor=Supporter certificate registered for %s
|
||||
@@ -533,6 +541,12 @@ updateReminder.notNow=Not Now
|
||||
updateReminder.yesOnce=Yes, Once
|
||||
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
|
||||
shareVault.title=Share Vault
|
||||
shareVault.message=Would you like to share your vault with others?
|
||||
|
||||
@@ -47,6 +47,7 @@ addvaultwizard.new.nameInstruction=اختر اسم للمخزن
|
||||
addvaultwizard.new.namePrompt=اسم الخزينة
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=أين يجب على Cryptomator تخزين الملفات المشفرة للمخزن الخاص بك؟
|
||||
addvaultwizard.new.locationLoading=جاري التحقق من وجود مسارات تخزين سحابية افتراضية في نظام الملفات المحلية…
|
||||
addvaultwizard.new.locationLabel=موقع التخزين
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=موقع مخصص
|
||||
@@ -141,6 +142,9 @@ unlock.error.customPath.description.hideawayNotDir=لا يمكن إزالة ال
|
||||
unlock.error.customPath.description.couldNotBeCleaned=لا يمكن تركيب خزانتك على المسار "%s". الرجاء المحاولة مرة أخرى أو اختيار مسار مختلف.
|
||||
unlock.error.customPath.description.notEmptyDir=مسار التركيب المخصص "%s" ليس مجلد فارغ. الرجاء اختيار مجلد فارغ وحاول مرة أخرى.
|
||||
unlock.error.customPath.description.generic=لقد اخترت مسار تركيب مخصص لهذه الخزانة، ولكن استخدامه فشل مع الرسالة: %2$s
|
||||
unlock.error.restartRequired.message=غير قادر على فتح الخزنة
|
||||
unlock.error.restartRequired.description=اختر نوع قرص آخر في خيارات المخزن أو اعد تشغيل Cryptomator.
|
||||
unlock.error.title=فشل فتح "%s"
|
||||
## Hub
|
||||
hub.noKeychain.message=غير قادر على الوصول إلى مفتاح الجهاز
|
||||
hub.noKeychain.description=من أجل فتح مركز مخازن، مطلوب مفتاح جهاز، يتم تأمينه باستخدام سلسلة مفاتيح. للمضي قدما، قم بتمكين "%s" واختر سلسلة مفاتيح في التفضيلات.
|
||||
@@ -153,11 +157,22 @@ hub.auth.loginLink=لم يتم إعادة توجيهك؟ انقر هنا لفت
|
||||
hub.receive.message=معالجة الاستجابة…
|
||||
hub.receive.description=Cryptomator يتلقى ويعالج الاستجابة من المركز. الرجاء الانتظار.
|
||||
### Register Device
|
||||
hub.register.message=جهاز جديد
|
||||
hub.register.description=هذا هو أول وصول مركزي من هذا الجهاز. الرجاء تسجيله باستخدام مفتاح الحساب الخاص بك.
|
||||
hub.register.nameLabel=اسم الجهاز
|
||||
hub.register.invalidAccountKeyLabel=مفتاح الحساب غير صحيح
|
||||
hub.register.registerBtn=تسجيل
|
||||
### Register Device Legacy
|
||||
hub.register.legacy.occupiedMsg=الاسم قيد الاستخدام
|
||||
hub.register.legacy.description=هذا هو أول وصول للمركز من هذا الجهاز. الرجاء تسجيله.
|
||||
### Registration Success
|
||||
hub.registerSuccess.message=تم تسجيل الجهاز
|
||||
hub.registerSuccess.description=تم تسجيل جهازك بنجاح. يمكنك الآن المتابعة لفتح الخزنة.
|
||||
hub.registerSuccess.unlockBtn=افتح
|
||||
hub.registerSuccess.legacy.description=للدخول إلى الخزينة، يحتاج جهازك كذالك إلى إذن من مالك الخزينة.
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=فشل تسجيل الجهاز
|
||||
hub.registerFailed.description.generic=حدث خطأ في عملية تسجيل الاسم. لمزيد من التفاصيل، راجع سجل التطبيق.
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=تم رفض الوصول
|
||||
hub.unauthorized.description=لم يتم بعد منح الإذن لجهازك بالوصول إلى هذا المخزن. اطلب من مالك المخزن أن يأذن بذلك.
|
||||
@@ -283,16 +298,21 @@ preferences.interface.showMinimizeButton=إظهار زر التصغير
|
||||
preferences.interface.showTrayIcon=إظهار أيقونة اللوحة (يتطلب إعادة تشغيل)
|
||||
## Volume
|
||||
preferences.volume=القرص الإفتراضي
|
||||
preferences.volume.type=نوع القرص الافتراضي
|
||||
preferences.volume.type.automatic=تلقائي
|
||||
preferences.volume.docsTooltip=افتح الوثائق لمعرفة المزيد عن مختلف أنواع وحدة التخزين.
|
||||
preferences.volume.fuseRestartRequired=لتطبيق التغييرات، يحتاج Cryptomator إلى إعادة التشغيل.
|
||||
preferences.volume.tcp.port=منفذ TCP الافتراضي
|
||||
preferences.volume.supportedFeatures=يدعم نوع وحدة تخزين المختار الميزات التالية:
|
||||
preferences.volume.feature.mountAuto=اختيار نقطة البَدْء التلقائية
|
||||
preferences.volume.feature.readOnly=تحميل للقراءة فقط
|
||||
## Updates
|
||||
preferences.updates=تحديثات
|
||||
preferences.updates.currentVersion=الإصدار الحالي: %s
|
||||
preferences.updates.autoUpdateCheck=تحقق من التحديثات اوتوماتيكيا
|
||||
preferences.updates.checkNowBtn=تحقق الان
|
||||
preferences.updates.updateAvailable=التحديث إلى الإصدار %s متاح.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=ادعمنا
|
||||
preferences.contribute.registeredFor=شهادة الداعم مسجلة لـ %s
|
||||
@@ -309,6 +329,8 @@ stats.title=إحصائيات عن %s
|
||||
stats.cacheHitRate=معدل استخدام الكاش
|
||||
## Read
|
||||
stats.read.throughput.idle=قراءة: خامل
|
||||
stats.read.throughput.kibs=القراءة: %.2f KiB/s
|
||||
stats.read.throughput.mibs=القراءة: %.2f MiB/s
|
||||
stats.decr.total.data.none=تم فك تشفير البيانات:-
|
||||
## Write
|
||||
stats.write.total.data.mib=البيانات المكتوبة: %.1f م.ب
|
||||
@@ -443,4 +465,7 @@ quit.lockAndQuitBtn=قفل و خروج
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=فتح التفضيلات
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -308,6 +308,7 @@ preferences.updates.currentVersion=Ағымдағы версия: %s
|
||||
preferences.updates.autoUpdateCheck=Яңыртыуҙарҙы автоматик рәүештә тикшереү
|
||||
preferences.updates.checkNowBtn=Хәҙер тикшер
|
||||
preferences.updates.updateAvailable=%s версияһына тиклем яңыртыу бар.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Ярҙам
|
||||
preferences.contribute.registeredFor=%s өсөн теркәлгән ярҙамсы сертификаты
|
||||
@@ -518,4 +519,7 @@ updateReminder.notNow=Хәҙер түгел
|
||||
updateReminder.yesOnce=Эйе, бер тапҡыр
|
||||
updateReminder.yesAutomatically=Эйе, автоматик рәүештә
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Көйләүҙәрҙе ас
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -295,6 +295,7 @@ preferences.updates.currentVersion=Бягучая версія: %s
|
||||
preferences.updates.autoUpdateCheck=Правяраць наяўнасць абнаўленняў аўтаматычна
|
||||
preferences.updates.checkNowBtn=Праверыць зараз
|
||||
preferences.updates.updateAvailable=Даступна абнаўленне да версіі %s
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Падтрымай нас
|
||||
preferences.contribute.registeredFor=Сэртыфікат ахвяравальніка зарэгістраваны на %s
|
||||
@@ -498,4 +499,7 @@ updateReminder.notNow=Не цяпер
|
||||
updateReminder.yesOnce=Так, аднойчы
|
||||
updateReminder.yesAutomatically=Так, аўтаматычна
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Адчыніць налады
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -308,6 +308,7 @@ preferences.updates.currentVersion=Текущо издание: %s
|
||||
preferences.updates.autoUpdateCheck=Автоматична проверка за издания
|
||||
preferences.updates.checkNowBtn=Проверяване
|
||||
preferences.updates.updateAvailable=Налично е ново издание %s.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Подкрепете ни
|
||||
preferences.contribute.registeredFor=Сертификатът за дарение е регистриран на %s
|
||||
@@ -518,4 +519,7 @@ updateReminder.notNow=Не сега
|
||||
updateReminder.yesOnce=Да, веднъж
|
||||
updateReminder.yesAutomatically=Да, автоматично
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Към настройките
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -122,6 +122,7 @@ lock.forced.retryBtn=পুনরায় চেষ্টা করুন
|
||||
## Interface
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -175,4 +176,6 @@ vaultOptions.mount.mountPoint.directoryPickerButton=নির্বাচন ক
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -171,6 +171,7 @@ preferences.updates.currentVersion=Trenutna verzija: %s
|
||||
preferences.updates.autoUpdateCheck=Automatski provjeri ima li ažuriranja
|
||||
preferences.updates.checkNowBtn=Provjeri sada
|
||||
preferences.updates.updateAvailable=Dostupno ažuriranje na verziju %s.
|
||||
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -317,4 +318,6 @@ quit.lockAndQuitBtn=Zaključaj i zatvori
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -47,6 +47,7 @@ addvaultwizard.new.nameInstruction=Introduiu el nom de la caixa forta
|
||||
addvaultwizard.new.namePrompt=Nom de la caixa forta
|
||||
### Location
|
||||
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.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Ubicació personalitzada
|
||||
@@ -141,6 +142,9 @@ 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.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.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.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.
|
||||
@@ -154,15 +158,30 @@ hub.receive.message=S'està processant la resposta…
|
||||
hub.receive.description=Cryptomator està rebent i processant la resposta del Hub. Espereu, si us plau.
|
||||
### Register Device
|
||||
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.invalidAccountKeyLabel=Account Key no és vàlida
|
||||
hub.register.registerBtn=Registre
|
||||
### 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
|
||||
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.legacy.description=Per a accedir a la caixa forta, el vostre dispositiu ha de ser autoritzat pel propietari de la caixa.
|
||||
### 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
|
||||
hub.unauthorized.message=Accés denegat
|
||||
hub.unauthorized.description=El vostre dispositiu no ha estat encara autoritzat a accedir a aquesta caixa forta. Demaneu autorització al propietari.
|
||||
### Requires Account Initialization
|
||||
hub.requireAccountInit.message=Acció necessària
|
||||
hub.requireAccountInit.description.0=Per a continuar, si us plau, seguiu els passos necessaris en el vostre
|
||||
hub.requireAccountInit.description.1=perfil d'usuari de Hub
|
||||
hub.requireAccountInit.description.2=.
|
||||
### License Exceeded
|
||||
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.
|
||||
@@ -284,9 +303,11 @@ preferences.interface.showMinimizeButton=Mostra el botó 'minimitzar'
|
||||
preferences.interface.showTrayIcon=Mostra la icona en la barra (cal reiniciar)
|
||||
## Volume
|
||||
preferences.volume=Unitat virtual
|
||||
preferences.volume.type=Tipus de volum per defecte
|
||||
preferences.volume.type.automatic=Automàtic
|
||||
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.tcp.port=Port TCP per defecte
|
||||
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.mountToDir=Directori personalitzat com a punt de muntatge
|
||||
@@ -299,6 +320,7 @@ preferences.updates.currentVersion=Versió actual: %s
|
||||
preferences.updates.autoUpdateCheck=Comprova automàticament si hi ha actualitzacions
|
||||
preferences.updates.checkNowBtn=Comprova-ho ara
|
||||
preferences.updates.updateAvailable=L'actualització a la versió %s es troba disponible.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Doneu-nos suport
|
||||
preferences.contribute.registeredFor=Certificat de col·laborador registrat per a %s
|
||||
@@ -371,6 +393,7 @@ main.vaultDetail.unlockBtn=Desbloca…
|
||||
main.vaultDetail.unlockNowBtn=Desbloqueja ara
|
||||
main.vaultDetail.optionsBtn=Opcions de la caixa forta
|
||||
main.vaultDetail.passwordSavedInKeychain=Contrasenya desada
|
||||
main.vaultDetail.share=Compateix…
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=DESBLOQUEJADA
|
||||
main.vaultDetail.accessLocation=Els continguts de la vostra caixa forta són accessibles aquí:
|
||||
@@ -425,6 +448,7 @@ vaultOptions.general.startHealthCheckBtn=Inicia la comprovació
|
||||
|
||||
## Mount
|
||||
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.customMountFlags=Senyaladors de muntatge personalitzats
|
||||
vaultOptions.mount.winDriveLetterOccupied=ocupat
|
||||
@@ -434,6 +458,10 @@ vaultOptions.mount.mountPoint.driveLetter=Utilitza la lletra de la unitat assign
|
||||
vaultOptions.mount.mountPoint.custom=Faci servir el directori escollit
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Trieu…
|
||||
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
|
||||
vaultOptions.masterkey=Contrasenya
|
||||
vaultOptions.masterkey.changePasswordBtn=Canvi de contrasenya
|
||||
@@ -505,4 +533,25 @@ updateReminder.notNow=Ara no
|
||||
updateReminder.yesOnce=Sí, una vegada
|
||||
updateReminder.yesAutomatically=Sí, automàticament
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Obrir les Preferències
|
||||
|
||||
# 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,6 +24,7 @@ error.existingSolutionDescription=Cryptomator neočekával, že se tak stane. Na
|
||||
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.dismiss=Zrušit
|
||||
error.lookUpSolution=Vyhledat řešení
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Trezor
|
||||
@@ -46,6 +47,7 @@ addvaultwizard.new.nameInstruction=Zvolte jméno trezoru
|
||||
addvaultwizard.new.namePrompt=Název trezoru
|
||||
### Location
|
||||
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.locationPrompt=...
|
||||
addvaultwizard.new.directoryPickerLabel=Vlastní umístění
|
||||
@@ -135,8 +137,12 @@ unlock.success.revealBtn=Zobrazit jednotku
|
||||
unlock.error.customPath.message=Nelze připojit trezor k vlastní cestě
|
||||
unlock.error.customPath.description.notSupported=Pokud chcete pokračovat v používání vlastní cesty, přejděte do nastavení a vyberte typ hlasitosti, který ji podporuje. V opačném případě přejděte do možností trezoru a vyberte podporovaný přípojný bod.
|
||||
unlock.error.customPath.description.notExists=Cesta k připojení neexistuje. Buď ji vytvořte ve vašem lokálním souborovém systému, nebo ji změňte v možnostech trezoru.
|
||||
unlock.error.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.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
|
||||
### Waiting
|
||||
hub.auth.message=Čekání na ověření…
|
||||
@@ -144,19 +150,33 @@ 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í.
|
||||
### Receive Key
|
||||
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
|
||||
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.invalidAccountKeyLabel=Neplatný Account Key
|
||||
hub.register.registerBtn=Registrovat
|
||||
### 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
|
||||
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.legacy.description=Pro přístup k trezoru musí být vaše zařízení autorizováno majitelem trezoru.
|
||||
### 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
|
||||
hub.unauthorized.message=Přístup odepřen
|
||||
hub.unauthorized.description=Vaše zařízení dosud nebylo oprávněno k přístupu k tomuto trezoru. Požádejte vlastníka trezoru, aby jej autorizoval.
|
||||
### Requires Account Initialization
|
||||
hub.requireAccountInit.message=Požadována akce
|
||||
hub.requireAccountInit.description.0=Chcete-li pokračovat, vyplňte prosím požadované kroky ve vašem
|
||||
hub.requireAccountInit.description.1=Uživatelský profil Hubu
|
||||
hub.requireAccountInit.description.2=.
|
||||
### License Exceeded
|
||||
hub.invalidLicense.message=Licence Hubu je neplatná
|
||||
|
||||
@@ -236,6 +256,7 @@ health.result.severityFilter.good=Dobré
|
||||
health.result.severityFilter.info=Informace
|
||||
health.result.severityFilter.warn=Varování
|
||||
health.result.severityFilter.crit=Kritické
|
||||
health.result.fixStateFilter.all=Stav opravy - Vše
|
||||
health.result.fixStateFilter.fixable=Opravitelné
|
||||
health.result.fixStateFilter.notFixable=Ne opravitelné
|
||||
health.result.fixStateFilter.fixing=Opravování…
|
||||
@@ -251,6 +272,7 @@ preferences.title=Nastavení
|
||||
## General
|
||||
preferences.general=Obecné
|
||||
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.debugDirectory=Ukázat soubory se záznamy událostí (log)
|
||||
preferences.general.autoStart=Spustit Cryptomator při spuštění systému
|
||||
@@ -273,6 +295,10 @@ preferences.interface.showTrayIcon=Zobrazit ikonu v liště (vyžaduje restart)
|
||||
preferences.volume=Virtuální jednotky
|
||||
preferences.volume.type=Výchozí typ jednotky
|
||||
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.readOnly=Připojení disku pouze pro čtení
|
||||
## Updates
|
||||
@@ -281,6 +307,7 @@ preferences.updates.currentVersion=Aktuální verze: %s
|
||||
preferences.updates.autoUpdateCheck=Automaticky kontrolovat aktualizace
|
||||
preferences.updates.checkNowBtn=Zkontrolovat nyní
|
||||
preferences.updates.updateAvailable=Dostupná nová verze %s.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Podpořte nás
|
||||
preferences.contribute.registeredFor=Certifikát podporovatele byl registrován pro %s
|
||||
@@ -353,6 +380,7 @@ main.vaultDetail.unlockBtn=Odemknout…
|
||||
main.vaultDetail.unlockNowBtn=Odemknout nyní
|
||||
main.vaultDetail.optionsBtn=Možnosti trezoru
|
||||
main.vaultDetail.passwordSavedInKeychain=Heslo uloženo
|
||||
main.vaultDetail.share=Sdílet…
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=ODEMKNUTO
|
||||
main.vaultDetail.accessLocation=Obsah vašeho trezoru je dostupný:
|
||||
@@ -366,7 +394,9 @@ main.vaultDetail.throughput.kbps=%.1f KiB/s
|
||||
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
||||
main.vaultDetail.stats=Statistiky trezoru
|
||||
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.filePickerTitle=Vyberte soubor uvnitř trezoru
|
||||
### Missing
|
||||
main.vaultDetail.missing.info=Cryptomator nemohl najít trezor na této cestě.
|
||||
main.vaultDetail.missing.recheck=Znovu zkontrolovat
|
||||
@@ -411,8 +441,10 @@ vaultOptions.mount.winDriveLetterOccupied=obsazeno
|
||||
vaultOptions.mount.mountPoint=Přípojný bod
|
||||
vaultOptions.mount.mountPoint.auto=Automaticky vybrat vhodné místo
|
||||
vaultOptions.mount.mountPoint.driveLetter=Použít zvolenou jednotku
|
||||
vaultOptions.mount.mountPoint.custom=Použít vybraný adresář
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Vybrat...
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Vyberte složku
|
||||
vaultOptions.mount.volumeType.default=Výchozí (%s)
|
||||
vaultOptions.mount.volume.tcp.port=TCP port
|
||||
vaultOptions.mount.volume.type=Typ jednotky
|
||||
## Master Key
|
||||
@@ -437,18 +469,23 @@ recoveryKey.display.StorageHints=Uchovejte ho někde velmi bezpečně, např.\n
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Resetovat heslo
|
||||
recoveryKey.recover.prompt=Zadejte obnovovací klíč pro "%s":
|
||||
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
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Resetovat
|
||||
### Recovery Key Password Reset Success
|
||||
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
|
||||
convertVault.title=Převést trezor
|
||||
convertVault.convert.convertBtn.before=Převést
|
||||
convertVault.convert.convertBtn.processing=Převádě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
|
||||
newPassword.promptText=Zadejte nové heslo
|
||||
@@ -479,4 +516,26 @@ updateReminder.notNow=Nyní ne
|
||||
updateReminder.yesOnce=Ano, jednou
|
||||
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
|
||||
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,6 +47,7 @@ addvaultwizard.new.nameInstruction=Vælg et navn til boksen
|
||||
addvaultwizard.new.namePrompt=Boks-navn
|
||||
### Location
|
||||
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.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Vælg placering
|
||||
@@ -141,6 +142,9 @@ 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.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.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.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.
|
||||
@@ -154,15 +158,30 @@ hub.receive.message=Behandler svar…
|
||||
hub.receive.description=Cryptomator modtager og behandler svaret fra hubben. Vent venligst.
|
||||
### Register Device
|
||||
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.invalidAccountKeyLabel=Ugyldig Account Key
|
||||
hub.register.registerBtn=Registrer
|
||||
### 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
|
||||
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.legacy.description=For at få adgang til boksen, skal din enhed desuden være godkendt af boksens ejer.
|
||||
### 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
|
||||
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.
|
||||
### 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
|
||||
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.
|
||||
@@ -284,9 +303,11 @@ preferences.interface.showMinimizeButton=Vis knap til minimering
|
||||
preferences.interface.showTrayIcon=Vis ikon i system-bakken (kræver genstart)
|
||||
## Volume
|
||||
preferences.volume=Virtuelt drev
|
||||
preferences.volume.type=Standard Drev Type
|
||||
preferences.volume.type.automatic=Automatisk
|
||||
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.tcp.port=Standard TCP- Port
|
||||
preferences.volume.supportedFeatures=Den valgte type drev understøtter følgende funktioner:
|
||||
preferences.volume.feature.mountAuto=Automatisk valg af monteringspunkt
|
||||
preferences.volume.feature.mountToDir=Brugerdefineret mappe som monteringspunkt
|
||||
@@ -299,6 +320,7 @@ preferences.updates.currentVersion=Nuværende version: %s
|
||||
preferences.updates.autoUpdateCheck=Søg automatisk efter opdateringer
|
||||
preferences.updates.checkNowBtn=Kontrollér nu
|
||||
preferences.updates.updateAvailable=Opdatering til version %s er tilgængelig.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Støt os
|
||||
preferences.contribute.registeredFor=Registreret supporter-certifikat for %s
|
||||
@@ -371,6 +393,7 @@ main.vaultDetail.unlockBtn=Lås op…
|
||||
main.vaultDetail.unlockNowBtn=Lås op nu
|
||||
main.vaultDetail.optionsBtn=Boksindstillinger
|
||||
main.vaultDetail.passwordSavedInKeychain=Adgangskode gemt
|
||||
main.vaultDetail.share=Del…
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=LÅST OP
|
||||
main.vaultDetail.accessLocation=Boksens indhold er tilgængeligt her:
|
||||
@@ -425,6 +448,7 @@ vaultOptions.general.startHealthCheckBtn=Start sunhedstjek
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=Montering
|
||||
vaultOptions.mount.info=Åbn indstillinger for virtuelle drev for at ændre standardindstillinger.
|
||||
vaultOptions.mount.readonly=Skrivebeskyttet
|
||||
vaultOptions.mount.customMountFlags=Brugerdefinerede monterings-flag
|
||||
vaultOptions.mount.winDriveLetterOccupied=optaget
|
||||
@@ -434,6 +458,10 @@ vaultOptions.mount.mountPoint.driveLetter=Brug et ledigt drevbogstav
|
||||
vaultOptions.mount.mountPoint.custom=Brug en valgt mappe
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Vælg…
|
||||
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
|
||||
vaultOptions.masterkey=Adgangskode
|
||||
vaultOptions.masterkey.changePasswordBtn=Skift adgangskode
|
||||
@@ -505,4 +533,25 @@ updateReminder.notNow=Ikke nu
|
||||
updateReminder.yesOnce=Ja, én gang
|
||||
updateReminder.yesAutomatically=Ja, automatisk
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Åbn Indstillinger
|
||||
|
||||
# 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
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Wo soll Cryptomator die verschlüsselten Dateien deines Tresors ablegen?
|
||||
addvaultwizard.new.locationLoading=Überprüfen des lokalen Dateisystems auf Standard-Cloud-Verzeichnisse…
|
||||
addvaultwizard.new.locationLoading=Lokales Dateisystem wird auf Standard-Cloud-Verzeichnisse überprüft …
|
||||
addvaultwizard.new.locationLabel=Speicherort
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
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.description=Dein Gerät ist erfolgreich registriert. Du kannst den Tresor jetzt entsperren.
|
||||
hub.registerSuccess.unlockBtn=Entsperren
|
||||
hub.registerSuccess.legacy.description=Um den Tresor zu öffnen muss dein Gerät zusätzlich vom Tresorbesitzer autorisiert werden.
|
||||
hub.registerSuccess.legacy.description=Für den Zugriff auf den Tresor muss dein Gerät zusätzlich vom Tresoreigentümer autorisiert werden.
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=Geräteregistrierung fehlgeschlagen
|
||||
hub.registerFailed.message=Gerät konnte nicht registriert werden
|
||||
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.
|
||||
### Unauthorized
|
||||
@@ -320,6 +320,14 @@ preferences.updates.currentVersion=Aktuelle Version: %s
|
||||
preferences.updates.autoUpdateCheck=Automatisch nach Updates suchen
|
||||
preferences.updates.checkNowBtn=Jetzt prüfen
|
||||
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
|
||||
preferences.contribute=Unterstütze uns
|
||||
preferences.contribute.registeredFor=Supporter-Zertifikat registriert für %s
|
||||
@@ -392,7 +400,7 @@ main.vaultDetail.unlockBtn=Entsperren …
|
||||
main.vaultDetail.unlockNowBtn=Jetzt entsperren
|
||||
main.vaultDetail.optionsBtn=Tresoroptionen
|
||||
main.vaultDetail.passwordSavedInKeychain=Passwort gespeichert
|
||||
main.vaultDetail.share=Teilen…
|
||||
main.vaultDetail.share=Teilen …
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=ENTSPERRT
|
||||
main.vaultDetail.accessLocation=Deine Tresorinhalte sind hier erreichbar:
|
||||
@@ -532,22 +540,25 @@ updateReminder.notNow=Nicht jetzt
|
||||
updateReminder.yesOnce=Ja, einmalig
|
||||
updateReminder.yesAutomatically=Ja, automatisch
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Einstellungen öffnen
|
||||
|
||||
# Share Vault
|
||||
shareVault.title=Tresor teilen
|
||||
shareVault.message=Möchtest du deinen Tresor mit anderen teilen?
|
||||
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 in deinem Cloud-Speicher.
|
||||
shareVault.description=Sei immer vorsichtig, wenn du deinen Tresor mit anderen Personen teilst. Kurz gesagt, befolge diese Schritte:
|
||||
shareVault.instruction.1=1. Teile den Zugriff auf den verschlüsselten Tresorordner über den Cloud-Speicher.
|
||||
shareVault.instruction.2=2. Teile das Tresorpasswort auf einem sicheren Weg.
|
||||
shareVault.remarkBestPractices=Für mehr Informationen lies dir unsere Vorschläge für bewährte Praktiken in unserer Dokumentation durch.
|
||||
shareVault.remarkBestPractices=Weitere Informationen findest du in den Vorschlägen für bewährte Verfahren in unserer Dokumentation.
|
||||
shareVault.docsTooltip=Öffne die Dokumentation, um mehr über das Teilen von Tresoren zu erfahren.
|
||||
shareVault.hubAd.description=Der sichere Weg in Teams zu arbeiten
|
||||
shareVault.hubAd.keyManagement=• Zero-knowledge Schlüsselverwaltung
|
||||
shareVault.hubAd.description=Die sichere Art der Teamarbeit
|
||||
shareVault.hubAd.keyManagement=• Zero-knowledge-Schlüsselverwaltung
|
||||
shareVault.hubAd.authentication=• Starke Authentifizierung
|
||||
shareVault.hubAd.encryption=• Ende-zu-Ende-Verschlüsselung
|
||||
shareVault.visitHub=Besuche Cryptomator Hub
|
||||
|
||||
shareVault.hub.message=Wie man einen Hub Tresor teilt
|
||||
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 in deinem Cloud-Speicher.
|
||||
shareVault.hub.message=Teilen eines Hub-Tresors
|
||||
shareVault.hub.description=Zur Freigabe des Tresorinhalts für ein anderes Teammitglied sind zwei Schritte erforderlich:
|
||||
shareVault.hub.instruction.1=1. Teile den Zugriff auf den verschlüsselten Tresorordner über den Cloud-Speicher.
|
||||
shareVault.hub.instruction.2=2. Füge das Teammitglied in Cryptomator Hub als Tresormitglied hinzu.
|
||||
shareVault.hub.openHub=Cryptomator Hub öffnen
|
||||
@@ -320,6 +320,14 @@ preferences.updates.currentVersion=Τρέχουσα έκδοση: %s
|
||||
preferences.updates.autoUpdateCheck=Αυτόματος έλεγχος για ενημερώσεις
|
||||
preferences.updates.checkNowBtn=Έλεγχος τώρα
|
||||
preferences.updates.updateAvailable=Η ενημέρωση για την έκδοση %s είναι διαθέσιμη.
|
||||
preferences.updates.lastUpdateCheck=Τελευταίος έλεγχος: %s
|
||||
preferences.updates.lastUpdateCheck.never=ποτέ
|
||||
preferences.updates.lastUpdateCheck.recently=πρόσφατα
|
||||
preferences.updates.lastUpdateCheck.daysAgo=%s ημέρες πριν
|
||||
preferences.updates.lastUpdateCheck.hoursAgo=%s ώρες πριν
|
||||
preferences.updates.checkFailed=Η αναζήτηση ενημερώσεων απέτυχε. Ελέγξτε τη σύνδεσή σας στο διαδίκτυο ή δοκιμάστε ξανά αργότερα.
|
||||
preferences.updates.upToDate=Το Cryptomator είναι ενημερωμένο.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Υποστηρίξτε μας
|
||||
preferences.contribute.registeredFor=Το πιστοποιητικό υποστήριξης καταχωρήθηκε για %s
|
||||
@@ -532,6 +540,12 @@ updateReminder.notNow=Όχι Τώρα
|
||||
updateReminder.yesOnce=Ναι, Μία Φορά
|
||||
updateReminder.yesAutomatically=Ναι, Αυτόματα
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.title=Ειδοποίηση κατάργησης
|
||||
dokanySupportEnd.message=Τέλος υποστήριξης για Dokany
|
||||
dokanySupportEnd.description=Ο τύπος τόμου Dokany δεν υποστηρίζεται πλέον από το Cryptomator. Οι ρυθμίσεις σας έχουν προσαρμοστεί για να χρησιμοποιούν τον προεπιλεγμένο τύπο τόμου. Μπορείτε να δείτε τον προεπιλεγμένο τύπο στις προτιμήσεις.
|
||||
dokanySupportEnd.preferencesBtn=Άνοιγμα Προτιμήσεων
|
||||
|
||||
# Share Vault
|
||||
shareVault.title=Κοινή χρήση Κρύπτης
|
||||
shareVault.message=Θα θέλατε να μοιραστείτε την κρύπτη σας με άλλους;
|
||||
|
||||
@@ -24,7 +24,7 @@ error.existingSolutionDescription=Cryptomator no esperaba que esto ocurriera, pe
|
||||
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.dismiss=Descartar
|
||||
error.lookUpSolution=Buscar solución
|
||||
error.lookUpSolution=Buscar una solución
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=Bóveda
|
||||
@@ -47,6 +47,7 @@ addvaultwizard.new.nameInstruction=Elegir un nombre para la bóveda
|
||||
addvaultwizard.new.namePrompt=Nombre de la bóveda
|
||||
### Location
|
||||
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.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Ubicación personalizada
|
||||
@@ -61,7 +62,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.chars=Caracteres de la palabra (por ejemplo, a, ж o 수)
|
||||
addvaultwizard.new.validCharacters.numbers=Números
|
||||
addvaultwizard.new.validCharacters.dashes=Guion (%s) o subrayado (%s)
|
||||
addvaultwizard.new.validCharacters.dashes=Guion (%s) o guion bajo (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Habilitar ajustes expertos
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Ingrese un valor entre 36 y 220 (por defecto 220)
|
||||
@@ -71,7 +72,7 @@ addvaultwizard.new.expertSettings.shorteningThreshold.valid=Válido
|
||||
### Password
|
||||
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.yes=Sí, por favor
|
||||
addvaultwizard.new.generateRecoveryKeyChoice.yes=Sí, por favor. Más vale prevenir que curar
|
||||
addvaultwizard.new.generateRecoveryKeyChoice.no=No, gracias
|
||||
### Information
|
||||
addvault.new.readme.storageLocation.fileName=IMPORTANTE.rtf
|
||||
@@ -129,7 +130,7 @@ unlock.chooseMasterkey.filePickerTitle=Seleccione el archivo de la clave maestra
|
||||
unlock.chooseMasterkey.filePickerMimeDesc=Clave maestra de Cryptomator
|
||||
## Success
|
||||
unlock.success.message=Desbloqueo exitoso
|
||||
unlock.success.description=El contenido de la bóveda "%s" ahora es accesible a través de su punto de montaje.
|
||||
unlock.success.description=El contenido de la caja fuerte "%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.revealBtn=Revelar unidad
|
||||
## Failure
|
||||
@@ -141,6 +142,8 @@ 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.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.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"
|
||||
## Hub
|
||||
hub.noKeychain.message=No se puede acceder a la clave del dispositivo
|
||||
@@ -155,13 +158,22 @@ hub.receive.message=Procesando la respuesta…
|
||||
hub.receive.description=Cryptomator está recibiendo y procesando la respuesta del Hub. Por favor espere.
|
||||
### Register Device
|
||||
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.invalidAccountKeyLabel=Account Key no válida
|
||||
hub.register.registerBtn=Registrarse
|
||||
### 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
|
||||
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.legacy.description=Para acceder a la bóveda, su dispositivo debe estar autorizado por el propietario de la bóveda.
|
||||
### 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
|
||||
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.
|
||||
@@ -181,8 +193,8 @@ lock.forced.description=El bloqueo de "%s" fue bloqueado por operaciones pendien
|
||||
lock.forced.retryBtn=Reintentar
|
||||
lock.forced.forceBtn=Forzar bloqueo
|
||||
## Failure
|
||||
lock.fail.message=Error al bloquear la bóveda
|
||||
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.
|
||||
lock.fail.message=Error al bloquear la caja fuerte
|
||||
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.
|
||||
|
||||
# Migration
|
||||
migration.title=Actualizar bóveda
|
||||
@@ -308,6 +320,14 @@ preferences.updates.currentVersion=Versión actual: %s
|
||||
preferences.updates.autoUpdateCheck=Buscar actualizaciones automáticamente
|
||||
preferences.updates.checkNowBtn=Buscar ahora
|
||||
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
|
||||
preferences.contribute=Apóyenos
|
||||
preferences.contribute.registeredFor=Certificado de soporte registrado para %s
|
||||
@@ -380,6 +400,7 @@ main.vaultDetail.unlockBtn=Desbloquear…
|
||||
main.vaultDetail.unlockNowBtn=Desbloquear ahora
|
||||
main.vaultDetail.optionsBtn=Opciones de la bóveda
|
||||
main.vaultDetail.passwordSavedInKeychain=Contraseña guardada
|
||||
main.vaultDetail.share=Compartir…
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=DESBLOQUEADO
|
||||
main.vaultDetail.accessLocation=El contenido de la bóveda es accesible aquí:
|
||||
@@ -445,6 +466,7 @@ vaultOptions.mount.mountPoint.custom=Usar directorio seleccionado
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Elegir…
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Seleccionar un directorio
|
||||
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.type=Tipo de volumen
|
||||
## Master Key
|
||||
@@ -518,4 +540,28 @@ updateReminder.notNow=Ahora no
|
||||
updateReminder.yesOnce=Sí, una vez
|
||||
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
|
||||
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
|
||||
@@ -95,6 +95,13 @@ lock.forced.retryBtn=تلاش مجدد
|
||||
## Interface
|
||||
## Volume
|
||||
## 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
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -149,4 +156,6 @@ vaultOptions.mount.mountPoint.directoryPickerButton=انتخاب کنید…
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -206,6 +206,7 @@ preferences.title=Asetukset
|
||||
## Interface
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -267,4 +268,7 @@ vaultOptions.masterkey.changePasswordBtn=Vaihda salasana
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Avaa asetukset
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -305,6 +305,7 @@ preferences.updates.currentVersion=Kasalukuyang Bersyon: %s
|
||||
preferences.updates.autoUpdateCheck=Awtomatikong suriin ang mga update
|
||||
preferences.updates.checkNowBtn=Tingnan ngayon
|
||||
preferences.updates.updateAvailable=Available ang update sa bersyong %s.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Suportahan Kami
|
||||
preferences.contribute.registeredFor=Nakarehistro ang sertipiko ng tagasuporta para sa %s
|
||||
@@ -511,4 +512,7 @@ updateReminder.notNow=Hindi ngayon
|
||||
updateReminder.yesOnce=Oo, Minsan
|
||||
updateReminder.yesAutomatically=Oo, Awtomatiko
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Buksan ang Mga Kagustuhan
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -320,6 +320,14 @@ preferences.updates.currentVersion=Version actuelle : “%s”
|
||||
preferences.updates.autoUpdateCheck=Vérifier automatiquement si des mises à jour sont disponibles
|
||||
preferences.updates.checkNowBtn=Vérifier maintenant
|
||||
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
|
||||
preferences.contribute=Nous soutenir
|
||||
preferences.contribute.registeredFor=Certificat de soutien enregistré pour %s
|
||||
@@ -477,7 +485,7 @@ vaultOptions.hub.convertBtn=Convertir en coffre-fort basé sur mot de passe
|
||||
## Display Recovery Key
|
||||
recoveryKey.display.title=Montrer la clé de récupération
|
||||
recoveryKey.create.message=Mot de passe requis
|
||||
recoveryKey.create.description=Entrer le mot de passe de "%s" pour afficher sa clé de récupération.
|
||||
recoveryKey.create.description=Entrez 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.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
|
||||
@@ -532,6 +540,12 @@ updateReminder.notNow=Plus tard
|
||||
updateReminder.yesOnce=Cette fois seulement
|
||||
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
|
||||
shareVault.title=Partager le coffre
|
||||
shareVault.message=Vous aimeriez partager votre coffre avec d'autres personnes ?
|
||||
|
||||
@@ -77,6 +77,7 @@ lock.forced.retryBtn=Tentar de novo
|
||||
## Interface
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -126,4 +127,6 @@ main.closeBtn.tooltip=Pechar
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -297,6 +297,7 @@ preferences.updates.currentVersion=הגרסה הנוכחית: %s
|
||||
preferences.updates.autoUpdateCheck=בצע בדיקת עדכונים אוטומטית
|
||||
preferences.updates.checkNowBtn=בדוק כעת
|
||||
preferences.updates.updateAvailable=שדרוג לגרסה %s זמין.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=תמוך בנו
|
||||
preferences.contribute.registeredFor=אישור על תמיכה על שם %s
|
||||
@@ -493,4 +494,7 @@ updateReminder.title=בדיקת עדכון
|
||||
updateReminder.message=חפש עדכונים?
|
||||
updateReminder.notNow=לא עכשיו
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=פתח העדפות
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -216,6 +216,7 @@ preferences.updates=नवीनीकरण
|
||||
preferences.updates.currentVersion=वर्तमान संस्करण: %s
|
||||
preferences.updates.checkNowBtn=अभी जाँचें
|
||||
preferences.updates.updateAvailable=संस्करण %s की तरफ नवीनीकरण उपलब्ध है।
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=हमें सपोर्ट करें
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
@@ -311,4 +312,7 @@ quit.forced.message=कुछ वॉल्ट्स लॉक नहीं ह
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=प्राथमिकताएँ खोलें
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -224,6 +224,7 @@ preferences.updates.currentVersion=Trenutna verzija: %s
|
||||
preferences.updates.autoUpdateCheck=Automatski provjeri nadogradnje
|
||||
preferences.updates.checkNowBtn=Provjeri sada
|
||||
preferences.updates.updateAvailable=Nadogradnja na verziju %s dostupna.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Podržite nas
|
||||
preferences.contribute.registeredFor=Certifikat podržavatelja registriran za %s
|
||||
@@ -382,4 +383,6 @@ quit.lockAndQuitBtn=Zaključaj i napusti
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -303,6 +303,7 @@ preferences.updates.currentVersion=Jelenlegi verzió: %s
|
||||
preferences.updates.autoUpdateCheck=Frissítések autómatikus keresése
|
||||
preferences.updates.checkNowBtn=Ellenőrzés most
|
||||
preferences.updates.updateAvailable=Frissítés a %s verzióra elérhető.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Támogasson bennünket
|
||||
preferences.contribute.registeredFor=Támogatói igazolás regisztrálva neki: %s
|
||||
@@ -509,4 +510,10 @@ updateReminder.notNow=Most nem
|
||||
updateReminder.yesOnce=Igen, egyszer
|
||||
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
|
||||
|
||||
@@ -20,6 +20,11 @@ error.description=Ups! Cryptomator tidak menyangka hal ini terjadi. Anda dapat m
|
||||
error.hyperlink.lookup=Cari error berikut
|
||||
error.hyperlink.report=Laporkan error berikut
|
||||
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.vault.vaultName=Vault
|
||||
@@ -34,13 +39,15 @@ traymenu.vault.lock=Kunci
|
||||
traymenu.vault.reveal=Perlihatkan
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Tambah Vault
|
||||
addvaultwizard.title=Tambah Brankas
|
||||
## New
|
||||
addvaultwizard.new.title=Tambah Vault baru
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Beri nama untuk vault berikut
|
||||
addvaultwizard.new.namePrompt=Nama Vault
|
||||
addvaultwizard.new.nameInstruction=Buat sebuah nama untuk brankas
|
||||
addvaultwizard.new.namePrompt=Nama Brankas
|
||||
### Location
|
||||
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.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Lokasi khusus
|
||||
@@ -50,7 +57,18 @@ addvaultwizard.new.fileAlreadyExists=Sudah ada file atau direktori dengan nama v
|
||||
addvaultwizard.new.locationDoesNotExist=Direktori pada path yang dipilih tidak tersedia atau tidak dapat diakses
|
||||
addvaultwizard.new.locationIsNotWritable=Anda tidak memiliki hak akses untuk menulis pada path yang dipilih
|
||||
addvaultwizard.new.locationIsOk=Lokasi yang sesuai dengan vault Anda
|
||||
addvaultwizard.new.invalidName=Nama 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
|
||||
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
|
||||
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?
|
||||
@@ -74,6 +92,7 @@ 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.4=Anda dapat menghapus file ini.
|
||||
## 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.chooseBtn=Pilih…
|
||||
addvaultwizard.existing.filePickerTitle=Pilih File Vault
|
||||
@@ -84,6 +103,7 @@ addvaultwizard.success.unlockNow=Buka Kunci Sekarang
|
||||
|
||||
# Remove 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.confirmBtn=Hapus Vault
|
||||
|
||||
@@ -94,6 +114,7 @@ changepassword.finalConfirmation=Saya mengerti bahwa saya tidak akan dapat menga
|
||||
|
||||
# Forget Password
|
||||
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.confirmBtn=Lupa Kata Sandi
|
||||
|
||||
@@ -103,25 +124,67 @@ unlock.passwordPrompt=Masukkan kata sandi "%s":
|
||||
unlock.savePassword=Ingat Kata Sandi
|
||||
unlock.unlockBtn=Buka Kunci
|
||||
## 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.filePickerTitle=Pilih File Masterkey
|
||||
unlock.chooseMasterkey.filePickerMimeDesc=MasterKey Cryptomator
|
||||
## Success
|
||||
unlock.success.message=Buka kunci berhasil
|
||||
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.revealBtn=Tampilkan Drive
|
||||
## 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.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
|
||||
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
|
||||
hub.receive.message=Respons pemrosesan…
|
||||
hub.receive.description=Cryptomator menerima dan memproses respons dari Hub. Harap tunggu.
|
||||
### 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
|
||||
hub.register.legacy.occupiedMsg=Nama sudah digunakan
|
||||
hub.register.legacy.description=Ini adalah akses Hub pertama dari perangkat ini. Silakan daftarkan.
|
||||
### 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.legacy.description=Untuk mengakses vault, perangkat Anda harus diberi wewenang tambahan oleh pemilik vault.
|
||||
### 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
|
||||
hub.unauthorized.message=Akses ditolak
|
||||
hub.unauthorized.description=Perangkat Anda belum diizinkan mengakses vault ini. Mintalah pemilik vault untuk mengizinkannya.
|
||||
### Requires Account Initialization
|
||||
hub.requireAccountInit.message=Tindakan diperlukan
|
||||
hub.requireAccountInit.description.0=Untuk melanjutkan, silakan lengkapi langkah-langkah yang diperlukan
|
||||
hub.requireAccountInit.description.1=Hub profil pengguna
|
||||
hub.requireAccountInit.description.2=.
|
||||
### 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
|
||||
## Force
|
||||
@@ -137,6 +200,11 @@ lock.fail.description=Vault "%s" tidak dapat dikunci. Pastikan bahwa file yang b
|
||||
migration.title=Tingkatkan Vault
|
||||
## Start
|
||||
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
|
||||
## Run
|
||||
migration.run.enterPassword=Masukkan kata sandi untuk "%s"
|
||||
@@ -185,8 +253,25 @@ health.check.detail.checkFinished=Pemeriksaan berhasil dilakukan.
|
||||
health.check.detail.checkFinishedAndFound=Pemeriksaan selesai. Silahkan tinjau hasilnya.
|
||||
health.check.detail.checkFailed=Pemeriksaan terhenti karena terjadi kesalahan.
|
||||
health.check.detail.checkCancelled=Pemeriksaan dibatalkan.
|
||||
health.check.detail.listFilters.label=Filter
|
||||
health.check.detail.fixAllSpecificBtn=Pemulihan semua jenis
|
||||
health.check.exportBtn=Ekspor Laporan
|
||||
## 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
|
||||
health.fix.fixBtn=Perbaiki
|
||||
health.fix.successTip=Perbaikan berhasil
|
||||
@@ -197,6 +282,7 @@ preferences.title=Preferensi
|
||||
## General
|
||||
preferences.general=Umum
|
||||
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.debugDirectory=Perlihatkan file log
|
||||
preferences.general.autoStart=Jalankan Cryptomator saat sistem dimulai
|
||||
@@ -217,13 +303,24 @@ preferences.interface.showMinimizeButton=Tampilkan tombol perkecil
|
||||
preferences.interface.showTrayIcon=Tampilkan ikon tray (aplikasi perlu dimuat ulang)
|
||||
## Volume
|
||||
preferences.volume=Drive Virtual
|
||||
preferences.volume.type=Jenis Default Volume
|
||||
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
|
||||
preferences.updates=Pembaharuan
|
||||
preferences.updates.currentVersion=Versi Saat Ini: %s
|
||||
preferences.updates.autoUpdateCheck=Otomatis periksa update
|
||||
preferences.updates.checkNowBtn=Periksa Sekarang
|
||||
preferences.updates.updateAvailable=Pembaharuan ke versi %s tersedia.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Dukung Kami
|
||||
preferences.contribute.registeredFor=Sertifikat supporter terdaftar atas nama %s
|
||||
@@ -240,26 +337,34 @@ stats.title=Statistik untuk %s
|
||||
stats.cacheHitRate=Tingkat Hit Cache
|
||||
## Read
|
||||
stats.read.throughput.idle=Baca: diam
|
||||
stats.read.throughput.kibs=Membaca: %.2f KiB/s
|
||||
stats.read.throughput.mibs=Baca: %.2f MiB/detik
|
||||
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.gib=Data dibaca: %.1f GiB
|
||||
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.gib=Data terdeksripsi: %.1f GiB
|
||||
stats.read.accessCount=Total dibaca: %d
|
||||
## Write
|
||||
stats.write.throughput.idle=Tulis: diam
|
||||
stats.write.throughput.kibs=Menulis: %.2f KiB/s
|
||||
stats.write.throughput.mibs=Tulis: %.2f MiB/detik
|
||||
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.gib=Data tertulis: %.1f GiB
|
||||
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.gib=Data terenkripsi: %.1f GiB
|
||||
stats.write.accessCount=Total ditulis: %d
|
||||
|
||||
## Accesses
|
||||
stats.access.current=Akses: %d
|
||||
stats.access.total=Total yang akses: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
@@ -276,6 +381,9 @@ main.vaultlist.contextMenu.unlock=Buka Kunci…
|
||||
main.vaultlist.contextMenu.unlockNow=Buka Kunci Sekarang
|
||||
main.vaultlist.contextMenu.vaultoptions=Tampilkan Opsi Vault
|
||||
main.vaultlist.contextMenu.reveal=Buka Drive
|
||||
main.vaultlist.addVaultBtn=Tambah
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Vault Baru...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Vault yang ada...
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Terima kasih telah memilih Cryptomator untuk melindungi file Anda. Jika Anda memerlukan bantuan, lihat panduan awal kami:
|
||||
@@ -285,16 +393,23 @@ main.vaultDetail.unlockBtn=Buka Kunci…
|
||||
main.vaultDetail.unlockNowBtn=Buka Kunci Sekarang
|
||||
main.vaultDetail.optionsBtn=Opsi Vault
|
||||
main.vaultDetail.passwordSavedInKeychain=Kata Sandi tersimpan
|
||||
main.vaultDetail.share=Bagikan…
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=TERBUKA
|
||||
main.vaultDetail.accessLocation=Konten vault Anda dapat diakses di sini:
|
||||
main.vaultDetail.revealBtn=Buka Drive
|
||||
main.vaultDetail.copyUri=Salin URI
|
||||
main.vaultDetail.lockBtn=Gembok
|
||||
main.vaultDetail.bytesPerSecondRead=Read:
|
||||
main.vaultDetail.bytesPerSecondWritten=Write:
|
||||
main.vaultDetail.throughput.idle=idle
|
||||
main.vaultDetail.throughput.kbps=%.1f KiB/s
|
||||
main.vaultDetail.throughput.mbps=%.1f MiB/detik
|
||||
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
|
||||
main.vaultDetail.missing.info=Cryptomator tidak dapat menemukan vault di path ini.
|
||||
main.vaultDetail.missing.recheck=Periksa kembali
|
||||
@@ -333,34 +448,59 @@ vaultOptions.general.startHealthCheckBtn=Mulai Pemeriksaan Kesehatan
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=Pemasangan
|
||||
vaultOptions.mount.info=Buka preferensi drive virtual untuk mengubah pengaturan default.
|
||||
vaultOptions.mount.readonly=Read-Only
|
||||
vaultOptions.mount.customMountFlags=Custom Mount Flags
|
||||
vaultOptions.mount.winDriveLetterOccupied=terpakai
|
||||
vaultOptions.mount.mountPoint=Titik Pasang
|
||||
vaultOptions.mount.mountPoint.auto=Secara otomatis memilih lokasi yang sesuai
|
||||
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.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
|
||||
vaultOptions.masterkey=Kata Sandi
|
||||
vaultOptions.masterkey.changePasswordBtn=Ubah 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.showRecoveryKeyBtn=Tampilkan Kunci Pemulihan
|
||||
vaultOptions.masterkey.recoverPasswordBtn=Atur Ulang Kata Sandi
|
||||
## 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
|
||||
## 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.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
|
||||
## Reset Password
|
||||
### 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.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
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=Atur ulang
|
||||
### 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
|
||||
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
|
||||
newPassword.promptText=Masukkan kata sandi baru
|
||||
@@ -375,10 +515,43 @@ passwordStrength.messageLabel.3=Kuat
|
||||
passwordStrength.messageLabel.4=Sangat kuat
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
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
|
||||
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,6 +47,7 @@ addvaultwizard.new.nameInstruction=Scegli un nome per la cassaforte
|
||||
addvaultwizard.new.namePrompt=Nome della Cassaforte
|
||||
### Location
|
||||
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.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Posizione personalizzata
|
||||
@@ -88,7 +89,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.1=🔐 VOLUME CRITTOGRAFATO 🔐
|
||||
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 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.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.4=Sentiti libero di rimuovere questo file.
|
||||
## Existing
|
||||
addvaultwizard.existing.title=Aggiungi una Cassaforte Esistente
|
||||
@@ -131,7 +132,7 @@ unlock.chooseMasterkey.filePickerMimeDesc=Chiave principale di Cryptomator
|
||||
unlock.success.message=Sbloccato con successo
|
||||
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.revealBtn=Rivela l'Unità
|
||||
unlock.success.revealBtn=Rivela Unità
|
||||
## Failure
|
||||
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.
|
||||
@@ -141,6 +142,8 @@ 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.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.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
|
||||
## Hub
|
||||
hub.noKeychain.message=Impossibile accedere alla chiave del dispositivo
|
||||
@@ -155,13 +158,22 @@ hub.receive.message=Elaborazione della risposta…
|
||||
hub.receive.description=Cryptomator sta ricevendo ed elaborando la risposta da Hub. Attendere prego.
|
||||
### Register Device
|
||||
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.invalidAccountKeyLabel=Chiave dell'account non valida
|
||||
hub.register.registerBtn=Registrati
|
||||
### 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
|
||||
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.legacy.description=Per accedere alla cassaforte, il tuo dispositivo deve essere anche autorizzato dal proprietario.
|
||||
### 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
|
||||
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.
|
||||
@@ -308,6 +320,14 @@ preferences.updates.currentVersion=Versione Corrente: %s
|
||||
preferences.updates.autoUpdateCheck=Cerca automaticamente gli aggiornamenti
|
||||
preferences.updates.checkNowBtn=Controlla Ora
|
||||
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
|
||||
preferences.contribute=Supportaci
|
||||
preferences.contribute.registeredFor=Certificato del sostenitore registrato per %s
|
||||
@@ -380,6 +400,7 @@ main.vaultDetail.unlockBtn=Sblocca…
|
||||
main.vaultDetail.unlockNowBtn=Sblocca Ora
|
||||
main.vaultDetail.optionsBtn=Opzioni della Cassaforte
|
||||
main.vaultDetail.passwordSavedInKeychain=Password salvata
|
||||
main.vaultDetail.share=Condividi…
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=SBLOCCATA
|
||||
main.vaultDetail.accessLocation=I contenuti della tua cassaforte sono accessibili qui:
|
||||
@@ -399,7 +420,7 @@ main.vaultDetail.filePickerTitle=Seleziona File Nella Cassaforte
|
||||
### Missing
|
||||
main.vaultDetail.missing.info=Cryptomator non è riuscito a trovare una cassaforte in questo percorso.
|
||||
main.vaultDetail.missing.recheck=Ricontrolla
|
||||
main.vaultDetail.missing.remove=Rimuovi dall'Elenco di Cassaforti…
|
||||
main.vaultDetail.missing.remove=Rimuovi dall'elenco delle casseforti…
|
||||
main.vaultDetail.missing.changeLocation=Cambia la Posizione della Cassaforte…
|
||||
### Needs Migration
|
||||
main.vaultDetail.migrateButton=Aggiorna la Cassaforte
|
||||
@@ -445,8 +466,9 @@ vaultOptions.mount.mountPoint.custom=Usa la directory scelta
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Scegli…
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Scegli una directory
|
||||
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.type=Tipo di Unità
|
||||
vaultOptions.mount.volume.type=Tipo di Volume
|
||||
## Master Key
|
||||
vaultOptions.masterkey=Password
|
||||
vaultOptions.masterkey.changePasswordBtn=Modifica password
|
||||
@@ -465,7 +487,7 @@ recoveryKey.display.title=Mostra Chiave Di Recupero
|
||||
recoveryKey.create.message=Password richiesta
|
||||
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.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
|
||||
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
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=Reimposta Password
|
||||
@@ -518,4 +540,28 @@ updateReminder.notNow=Non adesso
|
||||
updateReminder.yesOnce=Sì, una volta
|
||||
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
|
||||
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,6 +47,7 @@ addvaultwizard.new.nameInstruction=金庫の名前を入力してください
|
||||
addvaultwizard.new.namePrompt=金庫の名前
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=金庫の暗号化済みファイルをどの場所に保存しますか?
|
||||
addvaultwizard.new.locationLoading=デフォルトのクラウド・ストレージ・ディレクトリについてローカル・ファイルシステムをチェックする...
|
||||
addvaultwizard.new.locationLabel=保存場所
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=ユーザー設定
|
||||
@@ -143,6 +144,7 @@ unlock.error.customPath.description.notEmptyDir=カスタムマウントパス
|
||||
unlock.error.customPath.description.generic=この金庫に対してカスタムマウントパスを選択しましたが、以下のメッセージとともに失敗しました:%2$s
|
||||
unlock.error.restartRequired.message=金庫を解錠できません
|
||||
unlock.error.restartRequired.description=金庫のオプションからボリュームタイプを変更するか、Cryptomatorを再起動してください。
|
||||
unlock.error.title=ロック解除 "%s" に失敗しました。
|
||||
## Hub
|
||||
hub.noKeychain.message=デバイス キーにアクセスできません
|
||||
hub.noKeychain.description=ハブ金庫を解錠するには、キーチェーンが保護するデバイス キーが必要です。続行するには、"%s" を有効にし環境設定からキーチェーンを選択します。
|
||||
@@ -158,6 +160,7 @@ hub.receive.description=Cryptomator が Hub からの応答を受信、処理中
|
||||
hub.register.message=新しいデバイス
|
||||
hub.register.description=このデバイスからの最初のハブアクセスです。アカウントキーを使用して登録してください。
|
||||
hub.register.nameLabel=デバイス名
|
||||
hub.register.invalidAccountKeyLabel=無効なアカウントキー
|
||||
hub.register.registerBtn=登録
|
||||
### Register Device Legacy
|
||||
hub.register.legacy.occupiedMsg=この名前は既に使われています
|
||||
@@ -300,9 +303,11 @@ preferences.interface.showMinimizeButton=最小化ボタンを表示
|
||||
preferences.interface.showTrayIcon=トレイアイコンを表示 (再起動が必要)
|
||||
## Volume
|
||||
preferences.volume=仮想ドライブ
|
||||
preferences.volume.type=デフォルトのボリュームタイプ
|
||||
preferences.volume.type.automatic=自動
|
||||
preferences.volume.docsTooltip=異なるボリュームタイプの詳細については、ドキュメントを確認してください。
|
||||
preferences.volume.fuseRestartRequired=変更を適用するには、Cryptomator を再起動する必要があります。
|
||||
preferences.volume.tcp.port=既定のTCPポート
|
||||
preferences.volume.supportedFeatures=選択したボリューム形式は、次の機能をサポートしています:
|
||||
preferences.volume.feature.mountAuto=マウント先の自動選択
|
||||
preferences.volume.feature.mountToDir=カスタム ディレクトリをマウント先に指定
|
||||
@@ -315,6 +320,14 @@ preferences.updates.currentVersion=現在のバージョン: %s
|
||||
preferences.updates.autoUpdateCheck=自動的に更新を確認する
|
||||
preferences.updates.checkNowBtn=今すぐ確認
|
||||
preferences.updates.updateAvailable=利用可能なバージョン %s に更新します。
|
||||
preferences.updates.lastUpdateCheck=最終確認: %s
|
||||
preferences.updates.lastUpdateCheck.never=未確認
|
||||
preferences.updates.lastUpdateCheck.recently=最近
|
||||
preferences.updates.lastUpdateCheck.daysAgo=%s 日前
|
||||
preferences.updates.lastUpdateCheck.hoursAgo=%s 時間前
|
||||
preferences.updates.checkFailed=アップデートを探すのに失敗しました。インターネット接続を確認するか、後でもう一度お試しください。
|
||||
preferences.updates.upToDate=Cryptomator は最新です。
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=支援する
|
||||
preferences.contribute.registeredFor=サポート証明書 (%s) が登録されました
|
||||
@@ -387,6 +400,7 @@ main.vaultDetail.unlockBtn=解錠...
|
||||
main.vaultDetail.unlockNowBtn=今すぐ解錠
|
||||
main.vaultDetail.optionsBtn=金庫のオプション
|
||||
main.vaultDetail.passwordSavedInKeychain=パスワードを保存しました
|
||||
main.vaultDetail.share=共有…
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=解錠済み
|
||||
main.vaultDetail.accessLocation=金庫の内容はこちらからアクセスできます:
|
||||
@@ -441,6 +455,7 @@ vaultOptions.general.startHealthCheckBtn=正常性チェックを開始
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=マウント
|
||||
vaultOptions.mount.info=仮想ドライブの環境設定を開き、デフォルト設定を変更します。
|
||||
vaultOptions.mount.readonly=読み取り専用
|
||||
vaultOptions.mount.customMountFlags=カスタム マウント フラグ
|
||||
vaultOptions.mount.winDriveLetterOccupied=使用中
|
||||
@@ -450,6 +465,10 @@ vaultOptions.mount.mountPoint.driveLetter=割り当てられるドライブ文
|
||||
vaultOptions.mount.mountPoint.custom=選択したディレクトリを使う
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=選択...
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=ディレクトリを選択
|
||||
vaultOptions.mount.volumeType.default=既定値 (%s)
|
||||
vaultOptions.mount.volumeType.restartRequired=このボリュームタイプを使用するには、Cryptomatorを再起動する必要があります。
|
||||
vaultOptions.mount.volume.tcp.port=TCPポート
|
||||
vaultOptions.mount.volume.type=ボリュームタイプ
|
||||
## Master Key
|
||||
vaultOptions.masterkey=パスワード
|
||||
vaultOptions.masterkey.changePasswordBtn=パスワードの変更
|
||||
@@ -521,4 +540,25 @@ updateReminder.notNow=また後で
|
||||
updateReminder.yesOnce=はい、一度だけ
|
||||
updateReminder.yesAutomatically=自動的に行う
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=環境設定を開く
|
||||
|
||||
# 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を開く
|
||||
@@ -254,6 +254,7 @@ preferences.updates.currentVersion=현재 버전: %s
|
||||
preferences.updates.autoUpdateCheck=자동으로 업데이트 확인
|
||||
preferences.updates.checkNowBtn=지금 확인
|
||||
preferences.updates.updateAvailable=버전 %s의 업데이트가 가능합니다.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=후원하기
|
||||
preferences.contribute.registeredFor=%s (으)로 후원자 인증 등록됨
|
||||
@@ -444,4 +445,7 @@ quit.forced.forceAndQuitBtn=Vault 강제 잠금 후 종료하기
|
||||
updateReminder.title=업데이트 확인
|
||||
updateReminder.notNow=나중에
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=설정 열기
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -167,6 +167,7 @@ preferences.updates.currentVersion=Pašreizējā versija: %s
|
||||
preferences.updates.autoUpdateCheck=Automātiski pārbaudīt atjauninājumus
|
||||
preferences.updates.checkNowBtn=Pārbaudīt tagad
|
||||
preferences.updates.updateAvailable=Pieejams atjauninājums uz versiju %s.
|
||||
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -279,4 +280,6 @@ quit.lockAndQuitBtn=Aizslēgt un aizvērt
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -106,6 +106,7 @@ preferences.title=Поставки
|
||||
## Interface
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -160,4 +161,6 @@ vaultOptions.mount.mountPoint.directoryPickerButton=Избор…
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
## Interface
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -112,4 +113,6 @@
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -47,6 +47,7 @@ addvaultwizard.new.nameInstruction=Navngi hvelvet
|
||||
addvaultwizard.new.namePrompt=Navn på hvelvet
|
||||
### Location
|
||||
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.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Tilpasset lagringssted
|
||||
@@ -141,6 +142,8 @@ 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.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.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
|
||||
## Hub
|
||||
hub.noKeychain.message=Får ikke tilgang til enhetsnøkkel
|
||||
@@ -155,13 +158,22 @@ hub.receive.message=Prosesserer svar…
|
||||
hub.receive.description=Cryptomator mottar og behandler svaret fra Hub. Vennligst vent.
|
||||
### Register Device
|
||||
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.invalidAccountKeyLabel=Ugyldig kontonøkkel
|
||||
hub.register.registerBtn=Registrer
|
||||
### 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
|
||||
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.legacy.description=For å få tilgangen til hvelvet, må enheten din i tillegg godkjennes av hvelv eier.
|
||||
### 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
|
||||
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.
|
||||
@@ -308,6 +320,14 @@ preferences.updates.currentVersion=Gjeldende versjon: %s
|
||||
preferences.updates.autoUpdateCheck=Se automatisk etter oppdateringer
|
||||
preferences.updates.checkNowBtn=Sjekk nå
|
||||
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
|
||||
preferences.contribute=Støtt oss
|
||||
preferences.contribute.registeredFor=Supporter sertifikat registrert for %s
|
||||
@@ -380,6 +400,7 @@ main.vaultDetail.unlockBtn=Lås opp…
|
||||
main.vaultDetail.unlockNowBtn=Lås opp nå
|
||||
main.vaultDetail.optionsBtn=Alternativer for hvelvet
|
||||
main.vaultDetail.passwordSavedInKeychain=Passordet er lagret
|
||||
main.vaultDetail.share=Del…
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=ULÅST
|
||||
main.vaultDetail.accessLocation=Innholdet i hvelvet ditt er tilgjengelig her:
|
||||
@@ -445,6 +466,7 @@ vaultOptions.mount.mountPoint.custom=Bruk valgt mappe
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Velg…
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Velg en mappe
|
||||
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.type=Volumtype
|
||||
## Master Key
|
||||
@@ -518,4 +540,22 @@ updateReminder.notNow=Ikke nå
|
||||
updateReminder.yesOnce=Ja, en gang
|
||||
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
|
||||
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
|
||||
@@ -320,6 +320,14 @@ preferences.updates.currentVersion=Huidige Versie: "%s"
|
||||
preferences.updates.autoUpdateCheck=Automatisch controleren op updates
|
||||
preferences.updates.checkNowBtn=Controleer nu
|
||||
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
|
||||
preferences.contribute=Steun ons
|
||||
preferences.contribute.registeredFor=Supporter certificaat geregistreerd voor %s
|
||||
@@ -532,6 +540,12 @@ updateReminder.notNow=Niet nu
|
||||
updateReminder.yesOnce=Ja, Eenmaal
|
||||
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
|
||||
shareVault.title=Kluis delen
|
||||
shareVault.message=Wilt u uw kluis met anderen delen?
|
||||
|
||||
@@ -159,6 +159,7 @@ preferences.updates.currentVersion=Gjeldande versjon: %s
|
||||
preferences.updates.autoUpdateCheck=Sjå etter oppdateringar automatisk
|
||||
preferences.updates.checkNowBtn=Sjekk no
|
||||
preferences.updates.updateAvailable=Oppdatering til versjon %s er tilgjengeleg.
|
||||
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -277,4 +278,6 @@ quit.lockAndQuitBtn=Lås og avslutt
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -168,6 +168,7 @@ preferences.updates.currentVersion=ਮੌਜੂਦਾ ਵਰਜ਼ਨ: %s
|
||||
preferences.updates.autoUpdateCheck=ਅੱਪਡੇਟ ਲਈ ਆਪਣੇ-ਆਪ ਜਾਂਚ ਕਰੋ
|
||||
preferences.updates.checkNowBtn=ਹੁਣੇ ਜਾਂਚ ਕਰੋ
|
||||
preferences.updates.updateAvailable=ਉਪਲੱਬਧ %s ਵਰਜ਼ਨ ਲਈ ਅੱਪਡੇਟ ਕਰੋ।
|
||||
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -316,4 +317,6 @@ quit.lockAndQuitBtn=ਲਾਕ ਕਰੋ ਤੇ ਬਾਹਰ ਜਾਓ
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -320,6 +320,12 @@ preferences.updates.currentVersion=Obecna wersja: %s
|
||||
preferences.updates.autoUpdateCheck=Automatycznie sprawdzaj aktualizacje
|
||||
preferences.updates.checkNowBtn=Sprawdź teraz
|
||||
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
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Wesprzyj nas
|
||||
preferences.contribute.registeredFor=Certyfikat darczyńcy zarejestrowany dla %s
|
||||
@@ -532,6 +538,9 @@ updateReminder.notNow=Nie teraz
|
||||
updateReminder.yesOnce=Tak, raz
|
||||
updateReminder.yesAutomatically=Tak, automatycznie
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Otwórz ustawienia
|
||||
|
||||
# Share Vault
|
||||
shareVault.title=Udostępnij sejf
|
||||
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
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Onde deve o Cryptomator armazenar os arquivos criptografados do cofre?
|
||||
addvaultwizard.new.locationLoading=Verificando o sistema de arquivos por diretórios padrão de armazenamento na nuvem…
|
||||
addvaultwizard.new.locationLoading=Verificando o sistema de ficheiros local para directórios de armazenamento predefinidos na nuvem…
|
||||
addvaultwizard.new.locationLabel=Local de armazenamento
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Outro Local
|
||||
@@ -320,6 +320,14 @@ preferences.updates.currentVersion=Versão atual: %s
|
||||
preferences.updates.autoUpdateCheck=Verificar automaticamente por atualizações
|
||||
preferences.updates.checkNowBtn=Verificar Agora
|
||||
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
|
||||
preferences.contribute=Apoie-nos
|
||||
preferences.contribute.registeredFor=Certificado de apoiador registado para %s
|
||||
@@ -532,6 +540,12 @@ updateReminder.notNow=Agora não
|
||||
updateReminder.yesOnce=Sim, Uma Vez
|
||||
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
|
||||
shareVault.title=Partilhar cofre
|
||||
shareVault.message=Quer partilhar o seu cofre com outros?
|
||||
|
||||
@@ -320,6 +320,14 @@ preferences.updates.currentVersion=Versão atual: %s
|
||||
preferences.updates.autoUpdateCheck=Buscar atualizações automaticamente
|
||||
preferences.updates.checkNowBtn=Buscar Agora
|
||||
preferences.updates.updateAvailable=Atualizar para 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 dia atrás
|
||||
preferences.updates.lastUpdateCheck.hoursAgo=%s horas atrás
|
||||
preferences.updates.checkFailed=Procurando por atualizações falhou. Por favor, verifique sua conexão com a internet ou tente novamente mais tarde.
|
||||
preferences.updates.upToDate=O Cryptomator está atualizado.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Nos Apoie
|
||||
preferences.contribute.registeredFor=Certificado de apoiador registrado para %s
|
||||
@@ -371,7 +379,7 @@ main.closeBtn.tooltip=Fechar
|
||||
main.minimizeBtn.tooltip=Minimizar
|
||||
main.preferencesBtn.tooltip=Preferências
|
||||
main.debugModeEnabled.tooltip=Modo de depuração ativado
|
||||
main.supporterCertificateMissing.tooltip=Por favor doe
|
||||
main.supporterCertificateMissing.tooltip=Apoie-nos
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Clique aqui para adicionar um cofre
|
||||
main.vaultlist.contextMenu.remove=Remover…
|
||||
@@ -532,6 +540,12 @@ updateReminder.notNow=Agora Não
|
||||
updateReminder.yesOnce=Sim, Uma Vez
|
||||
updateReminder.yesAutomatically=Sim, Automaticamente
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.title=Aviso de descontinuação
|
||||
dokanySupportEnd.message=Fim do suporte para o Dokany
|
||||
dokanySupportEnd.description=O volume do tipo Dokany não é mais suportado pelo Cryptomator. Suas configurações serão ajustadas para usar o tipo de volume padrão agora. Você pode ver o tipo padrão nas preferências.
|
||||
dokanySupportEnd.preferencesBtn=Abrir Preferências
|
||||
|
||||
# Share Vault
|
||||
shareVault.title=Compartilhar Cofre
|
||||
shareVault.message=Gostaria de compartilhar o seu cofre com outras pessoas?
|
||||
|
||||
@@ -303,6 +303,7 @@ preferences.updates.currentVersion=Versiunea actuală: %s
|
||||
preferences.updates.autoUpdateCheck=Verificare automată actualizări
|
||||
preferences.updates.checkNowBtn=Verifică acum
|
||||
preferences.updates.updateAvailable=Actualizare la versiunea %s disponibilă.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Susțineți-ne
|
||||
preferences.contribute.registeredFor=Certificat de suporter înregistrat pentru %s
|
||||
@@ -509,4 +510,7 @@ updateReminder.notNow=Nu acum
|
||||
updateReminder.yesOnce=Da, o dată
|
||||
updateReminder.yesAutomatically=Da, automat
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Deschideţi preferinţele
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -320,6 +320,14 @@ preferences.updates.currentVersion=Текущая версия: %s
|
||||
preferences.updates.autoUpdateCheck=Автоматически проверять наличие обновлений
|
||||
preferences.updates.checkNowBtn=Проверить
|
||||
preferences.updates.updateAvailable=Доступно обновление до версии %s.
|
||||
preferences.updates.lastUpdateCheck=Последняя проверка: %s
|
||||
preferences.updates.lastUpdateCheck.never=никогда
|
||||
preferences.updates.lastUpdateCheck.recently=недавно
|
||||
preferences.updates.lastUpdateCheck.daysAgo=%s дн. назад
|
||||
preferences.updates.lastUpdateCheck.hoursAgo=%s часов назад
|
||||
preferences.updates.checkFailed=Ошибка поиска обновлений. Проверьте подключение к Интернету и повторите попытку.
|
||||
preferences.updates.upToDate=У вас новейшая версия Cryptomator.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Поддержите нас
|
||||
preferences.contribute.registeredFor=Сертификат мецената зарегистрирован на имя %s
|
||||
@@ -532,6 +540,12 @@ updateReminder.notNow=Не сейчас
|
||||
updateReminder.yesOnce=Да, один раз
|
||||
updateReminder.yesAutomatically=Да, автоматически
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.title=Уведомление об устаревании
|
||||
dokanySupportEnd.message=Заканчивается поддержка для Dokany
|
||||
dokanySupportEnd.description=Cryptomator больше не поддерживает тома Dokany. Параметры будут изменены на использование типа томов по умолчанию. Тип по умолчанию см. в настройках.
|
||||
dokanySupportEnd.preferencesBtn=Открыть настройки
|
||||
|
||||
# Share Vault
|
||||
shareVault.title=Поделиться хранилищем
|
||||
shareVault.message=Хотите поделиться хранилищем с другими?
|
||||
|
||||
@@ -81,6 +81,7 @@ hub.registerSuccess.unlockBtn=අගුළුහරින්න
|
||||
## Interface
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -130,4 +131,6 @@ main.closeBtn.tooltip=වසන්න
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -312,6 +312,14 @@ preferences.updates.currentVersion=Aktuálna verzia: %s
|
||||
preferences.updates.autoUpdateCheck=Automatická kontrola aktualizácii
|
||||
preferences.updates.checkNowBtn=Skontroluj teraz
|
||||
preferences.updates.updateAvailable=Možnosť aktualizácie na verziu %s.
|
||||
preferences.updates.lastUpdateCheck=Posledná kontrola: %s
|
||||
preferences.updates.lastUpdateCheck.never=nikdy
|
||||
preferences.updates.lastUpdateCheck.recently=nedávno
|
||||
preferences.updates.lastUpdateCheck.daysAgo=pred %s dňami
|
||||
preferences.updates.lastUpdateCheck.hoursAgo=pred %s hodinami
|
||||
preferences.updates.checkFailed=Kontrola aktualizácie zlyhala. Prosím skontrolujte pripojenie k internetu a skúste znovu.
|
||||
preferences.updates.upToDate=Cryptomator je aktuálny.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Podporte nás
|
||||
preferences.contribute.registeredFor=Certifikát podporovateľa registrovaný na %s
|
||||
@@ -523,6 +531,12 @@ updateReminder.notNow=Teraz nie
|
||||
updateReminder.yesOnce=Áno, raz
|
||||
updateReminder.yesAutomatically=Áno, automaticky
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.title=Oznámenie o neschválení
|
||||
dokanySupportEnd.message=Ukončenie podpory pre Dokany
|
||||
dokanySupportEnd.description=Typ média Dokany už Cryptomator viac nepodporuje. Vaše nastavenia sú nastavené používať základný typ média. Základný typ môžete vidieť v nastaveniach.
|
||||
dokanySupportEnd.preferencesBtn=Otvoriť predvoľby
|
||||
|
||||
# Share Vault
|
||||
shareVault.title=Zdielať trezor
|
||||
shareVault.hubAd.authentication=* Silná autentifikácia
|
||||
|
||||
@@ -47,13 +47,16 @@ addvaultwizard.new.validCharacters.numbers=Številke
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Veljavno
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Ustvari trezor
|
||||
### Information
|
||||
## Existing
|
||||
addvaultwizard.existing.title=Dodaj obstoječi trezor
|
||||
addvaultwizard.existing.chooseBtn=Izberi…
|
||||
## Success
|
||||
addvaultwizard.success.unlockNow=Odkleni zdaj
|
||||
|
||||
# Remove Vault
|
||||
removeVault.title=Odstrani "%s"
|
||||
|
||||
# Change Password
|
||||
|
||||
@@ -85,6 +88,7 @@ lock.forced.retryBtn=Poizkusi znova
|
||||
## Start
|
||||
## Run
|
||||
## Success
|
||||
migration.success.unlockNow=Odkleni zdaj
|
||||
## Missing file system capabilities
|
||||
## Impossible
|
||||
|
||||
@@ -103,6 +107,11 @@ preferences.title=Nastavitve
|
||||
## Volume
|
||||
preferences.volume.docsTooltip=Informacije o različnih podatkovnih nosilcih najdete v navodilih.
|
||||
## Updates
|
||||
preferences.updates.lastUpdateCheck=Zadnjič preverjeno: %s
|
||||
preferences.updates.lastUpdateCheck.never=nikoli
|
||||
preferences.updates.lastUpdateCheck.recently=nedavno
|
||||
preferences.updates.lastUpdateCheck.daysAgo=%s dni nazaj
|
||||
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -120,10 +129,13 @@ main.closeBtn.tooltip=Zapri
|
||||
main.preferencesBtn.tooltip=Nastavitve
|
||||
## Vault List
|
||||
main.vaultlist.contextMenu.lock=Zakleni
|
||||
main.vaultlist.contextMenu.unlockNow=Odkleni zdaj
|
||||
main.vaultlist.addVaultBtn=Dodaj
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
### Locked
|
||||
main.vaultDetail.unlockNowBtn=Odkleni zdaj
|
||||
main.vaultDetail.share=Deli…
|
||||
### Unlocked
|
||||
main.vaultDetail.lockBtn=Zakleni
|
||||
main.vaultDetail.locateEncryptedFileBtn=Poišči šifrirano datoteko
|
||||
@@ -162,4 +174,6 @@ recoveryKey.recover.invalidKey=Obnovitveni ključ ni pravilen
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -170,6 +170,7 @@ preferences.updates.currentVersion=Trenutna verzija: %s
|
||||
preferences.updates.autoUpdateCheck=Automatska provera dostupnih ažuriranja
|
||||
preferences.updates.checkNowBtn=Proveri sada
|
||||
preferences.updates.updateAvailable=Ažuriranje na verziju %s je dostupno.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Podržite Nas
|
||||
preferences.contribute.registeredFor=Sertifikat "Prijatelj Projekta" registrovan je na %s
|
||||
@@ -321,4 +322,6 @@ quit.lockAndQuitBtn=Zaključaj i Izađi
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -160,6 +160,7 @@ preferences.updates.currentVersion=Trenutna verzija: %s
|
||||
preferences.updates.autoUpdateCheck=Automatska provera dostupnih ažuriranja
|
||||
preferences.updates.checkNowBtn=Proveri sada
|
||||
preferences.updates.updateAvailable=Ažuriranje na verziju %s je dostupno.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Podržite Nas
|
||||
preferences.contribute.registeredFor=Sertifikat "Prijatelj Projekta" registrovan je na %s
|
||||
@@ -238,4 +239,6 @@ vaultOptions.masterkey.changePasswordBtn=Promena lozinke
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -320,6 +320,14 @@ preferences.updates.currentVersion=Nuvarande version: %s
|
||||
preferences.updates.autoUpdateCheck=Sök efter uppdateringar automatiskt
|
||||
preferences.updates.checkNowBtn=Kontrollera nu
|
||||
preferences.updates.updateAvailable=Uppdatering till version %s finns tillgänglig.
|
||||
preferences.updates.lastUpdateCheck=Senast kontrollerad: %s
|
||||
preferences.updates.lastUpdateCheck.never=aldrig
|
||||
preferences.updates.lastUpdateCheck.recently=nyligen
|
||||
preferences.updates.lastUpdateCheck.daysAgo=%s dagar sedan
|
||||
preferences.updates.lastUpdateCheck.hoursAgo=%s timmar sedan
|
||||
preferences.updates.checkFailed=Det gick inte att söka efter uppdateringar. Kontrollera din internetanslutning eller försök igen senare.
|
||||
preferences.updates.upToDate=Cryptomator är uppdaterad.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Stöd oss
|
||||
preferences.contribute.registeredFor=Supportercertifikat registrerat till %s
|
||||
@@ -532,6 +540,12 @@ updateReminder.notNow=Inte nu
|
||||
updateReminder.yesOnce=Ja, en gång
|
||||
updateReminder.yesAutomatically=Ja, automatiskt
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.title=Avvecklingmeddelande
|
||||
dokanySupportEnd.message=Dokany stöds inte längre
|
||||
dokanySupportEnd.description=Volymtypen Dokany stöds inte längre av Cryptomator. Dina inställningar justeras för att använda standardvolymtypen nu. Du kan visa standardtypen i inställningarna.
|
||||
dokanySupportEnd.preferencesBtn=Gå till inställningarna
|
||||
|
||||
# Share Vault
|
||||
shareVault.title=Dela valv
|
||||
shareVault.message=Vill du dela ditt valv med andra?
|
||||
|
||||
@@ -280,6 +280,7 @@ preferences.updates.currentVersion=Toleo la Sasa: %s
|
||||
preferences.updates.autoUpdateCheck=Kagua sasishi otomatiki
|
||||
preferences.updates.checkNowBtn=Angalia Sasa
|
||||
preferences.updates.updateAvailable=Sasisha hadi toleo %s inapatikana.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Tusaidie
|
||||
preferences.contribute.registeredFor=Cheti cha kiungaji mkono kimesajiliwa kwa %s
|
||||
@@ -469,4 +470,7 @@ quit.forced.forceAndQuitBtn=Lazimisha na Uache
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Fungua Mapendeleo
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -186,6 +186,7 @@ preferences.interface.theme.dark=இருள்
|
||||
preferences.interface.theme.light=வெளிச்சம்
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -304,4 +305,6 @@ quit.forced.forceAndQuitBtn=கட்டாயப்படுத்தி வெ
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -67,6 +67,7 @@ preferences.interface.theme.dark=నలుపు
|
||||
preferences.interface.theme.light=కాంతి
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -115,4 +116,6 @@ preferences.interface.theme.light=కాంతి
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -123,6 +123,7 @@ preferences.title=การตั้งค่า
|
||||
## Interface
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
## Contribution
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
@@ -178,4 +179,6 @@ vaultOptions.mount.mountPoint.directoryPickerButton=เลือก...
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user