mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-09-21 15:34:27 +00:00
Compare commits
230
Commits
1.12.1
...
1.14.2-beta1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e4e757606d | ||
|
|
6fcb796177 | ||
|
|
4d6b035c29 | ||
|
|
d6a020994e | ||
|
|
518f75be32 | ||
|
|
28c7dbad69 | ||
|
|
68bf441fdd | ||
|
|
a606bcb81e | ||
|
|
fe93e51ffa | ||
|
|
f2949aae63 | ||
|
|
80e101456b | ||
|
|
2f311c1dfe | ||
|
|
8aaee3710a | ||
|
|
414d81dc06 | ||
|
|
b450ab028d | ||
|
|
5a51e53603 | ||
|
|
d65beb632d | ||
|
|
2b03477d31 | ||
|
|
f25e23da82 | ||
|
|
82368e2632 | ||
|
|
9057090b56 | ||
|
|
357937e0bf | ||
|
|
f84a2396eb | ||
|
|
193dcad6e8 | ||
|
|
257f4427b8 | ||
|
|
4778ba0770 | ||
|
|
77b908199e | ||
|
|
d448c42f87 | ||
|
|
b9403222ba | ||
|
|
93d0fd41a6 | ||
|
|
067bd4752c | ||
|
|
fb4f9fc68f | ||
|
|
a20667a156 | ||
|
|
4d47544244 | ||
|
|
d59f149f7c | ||
|
|
028f6e7a02 | ||
|
|
71e4f98665 | ||
|
|
d60ced52fe | ||
|
|
45c7d2b071 | ||
|
|
7a789d2eed | ||
|
|
cc1e542146 | ||
|
|
e4e84d46b6 | ||
|
|
61fc53bf9c | ||
|
|
f8386a5a99 | ||
|
|
da7e89fc72 | ||
|
|
6b57a0ad9c | ||
|
|
f1eb997804 | ||
|
|
2fe5180721 | ||
|
|
2fa88490bd | ||
|
|
5f5b5a5426 | ||
|
|
cb054bb4f5 | ||
|
|
b4f9bc62ca | ||
|
|
34bface2d7 | ||
|
|
70e52b1a31 | ||
|
|
59a2398c4c | ||
|
|
e5003c1783 | ||
|
|
d6fd012f71 | ||
|
|
d9d8c84230 | ||
|
|
1ad2cc3ee5 | ||
|
|
2eac09f6be | ||
|
|
4114ea6163 | ||
|
|
82da9f7a88 | ||
|
|
aa08046c4d | ||
|
|
b6d7f63470 | ||
|
|
624d18238c | ||
|
|
3bfe2b7a9e | ||
|
|
ba79cd0f8c | ||
|
|
be63ea1104 | ||
|
|
a3ad2a5677 | ||
|
|
26e5ceea01 | ||
|
|
83f1c4ea41 | ||
|
|
8d78e1432a | ||
|
|
d2ec5a5646 | ||
|
|
6bb0328799 | ||
|
|
8a8617b480 | ||
|
|
7484744038 | ||
|
|
0bbc4ecae5 | ||
|
|
9fcb166047 | ||
|
|
1ac017e3ab | ||
|
|
1ba401b8e6 | ||
|
|
07303b58f7 | ||
|
|
32a463768c | ||
|
|
2307950e3b | ||
|
|
8108128c22 | ||
|
|
58fe6da7a8 | ||
|
|
92bf73297a | ||
|
|
0bf8fb39dd | ||
|
|
0dc9a3a834 | ||
|
|
91d6264b9f | ||
|
|
d2599ea525 | ||
|
|
7180af9bc7 | ||
|
|
dc993dc57c | ||
|
|
464c74ab6c | ||
|
|
8c7dd8c74f | ||
|
|
69bcf6fac6 | ||
|
|
7c243dd434 | ||
|
|
357a0b9c31 | ||
|
|
d69d11b82f | ||
|
|
863e9bbcb3 | ||
|
|
1c47012033 | ||
|
|
cd99eaa323 | ||
|
|
dda2afda92 | ||
|
|
5519eefcfa | ||
|
|
a81352800d | ||
|
|
6fec16e498 | ||
|
|
42f31204a3 | ||
|
|
7ab64cfe46 | ||
|
|
1581a10c04 | ||
|
|
249becc25d | ||
|
|
da8e84f39d | ||
|
|
9ad2d223c3 | ||
|
|
3bf1e659ef | ||
|
|
e79257e5ea | ||
|
|
dac517a6fb | ||
|
|
1ab808f1b0 | ||
|
|
08f81b7df4 | ||
|
|
b16f32ca83 | ||
|
|
d6ed88b544 | ||
|
|
ae697d7b73 | ||
|
|
ff3306cc17 | ||
|
|
9ae2f4e0f6 | ||
|
|
4230afcbac | ||
|
|
7fc6ab05a4 | ||
|
|
060f6bfc97 | ||
|
|
919dac6caa | ||
|
|
98bcf63b2c | ||
|
|
0585262952 | ||
|
|
a33dc3980e | ||
|
|
caa5e77386 | ||
|
|
c037920e79 | ||
|
|
3cdd352d39 | ||
|
|
8ae80e2932 | ||
|
|
2ffa1ee236 | ||
|
|
2bf5b57823 | ||
|
|
853ea69180 | ||
|
|
43d0dd99ec | ||
|
|
b40e6db701 | ||
|
|
387eb420eb | ||
|
|
7785bb8820 | ||
|
|
de4fa8c7b0 | ||
|
|
17f519e01c | ||
|
|
6c50023074 | ||
|
|
0009940e1e | ||
|
|
f2a50b59b5 | ||
|
|
ed03606981 | ||
|
|
4a1eaf25c7 | ||
|
|
f5e445a610 | ||
|
|
6a3a256c0b | ||
|
|
1ed77ebcc0 | ||
|
|
db224e9e5c | ||
|
|
c719982ef3 | ||
|
|
f783f5d5ec | ||
|
|
dd4f87b54c | ||
|
|
b3789700e1 | ||
|
|
b39834f4eb | ||
|
|
8064d75102 | ||
|
|
4064b61cd7 | ||
|
|
ef3affece3 | ||
|
|
414465371b | ||
|
|
feed72a729 | ||
|
|
bca20a7a66 | ||
|
|
a38377baaa | ||
|
|
61a45fc738 | ||
|
|
3a65b5551f | ||
|
|
94ed5c18b8 | ||
|
|
a559483d86 | ||
|
|
3acdef1dd0 | ||
|
|
def6f8ab95 | ||
|
|
11ba1f3ddc | ||
|
|
3228f2cf5f | ||
|
|
9c4f7ad79d | ||
|
|
3bd57d162b | ||
|
|
5ea73a5a8d | ||
|
|
38670838c7 | ||
|
|
3e0b84dbce | ||
|
|
2302db6206 | ||
|
|
a94bf99660 | ||
|
|
0c5ce353b1 | ||
|
|
b3ce777a42 | ||
|
|
3085df3397 | ||
|
|
fb740b605f | ||
|
|
6a74d9f3b2 | ||
|
|
1c7dffb63f | ||
|
|
a213f073b1 | ||
|
|
1ab73be1f4 | ||
|
|
8412871090 | ||
|
|
fa63f3ca67 | ||
|
|
dbc0f52481 | ||
|
|
b8cd1caeac | ||
|
|
43c25b6d97 | ||
|
|
e44bc09074 | ||
|
|
7b02f78ef5 | ||
|
|
f7e8a4d1e6 | ||
|
|
664375d692 | ||
|
|
2d968eac8c | ||
|
|
542d2fcfe1 | ||
|
|
144e929896 | ||
|
|
803748f78d | ||
|
|
3410e7243a | ||
|
|
84732337ca | ||
|
|
c527808710 | ||
|
|
99c89dbf39 | ||
|
|
829b64cd3d | ||
|
|
f4007267fb | ||
|
|
c82a0bfaf3 | ||
|
|
251ad65344 | ||
|
|
155ba4607b | ||
|
|
62f6865d3e | ||
|
|
ffb3290248 | ||
|
|
a013ae3d91 | ||
|
|
19a954e677 | ||
|
|
f262980acc | ||
|
|
3b3aa18c92 | ||
|
|
c7b8bc89c2 | ||
|
|
5fc981abd3 | ||
|
|
36ec1a5ebc | ||
|
|
be4aad4168 | ||
|
|
fcb940e29c | ||
|
|
4f3ca2a6c4 | ||
|
|
27cd34bee0 | ||
|
|
c07e51be51 | ||
|
|
0421879b39 | ||
|
|
2d627717a0 | ||
|
|
dc0e88a694 | ||
|
|
a5e3630375 | ||
|
|
17335e8f70 | ||
|
|
42dd2fba48 | ||
|
|
e1cca6427c | ||
|
|
42d3dbaa23 | ||
|
|
185d67c492 |
@@ -7,6 +7,9 @@ updates:
|
||||
day: "monday"
|
||||
time: "06:00"
|
||||
timezone: "Etc/UTC"
|
||||
ignore:
|
||||
- dependency-name: "org.cryptomator:integrations-api"
|
||||
versions: ["2.0.0-alpha1"]
|
||||
groups:
|
||||
java-test-dependencies:
|
||||
patterns:
|
||||
|
||||
@@ -11,7 +11,7 @@ on:
|
||||
|
||||
env:
|
||||
JAVA_DIST: 'zulu'
|
||||
JAVA_VERSION: '21.0.2+13'
|
||||
JAVA_VERSION: '22.0.2+9'
|
||||
|
||||
jobs:
|
||||
get-version:
|
||||
@@ -29,12 +29,12 @@ jobs:
|
||||
include:
|
||||
- os: ubuntu-latest
|
||||
appimage-suffix: x86_64
|
||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_linux-x64_bin-jmods.zip'
|
||||
openjfx-sha: '7baed11ca56d5fee85995fa6612d4299f1e8b7337287228f7f12fd50407c56f8'
|
||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-x64_bin-jmods.zip'
|
||||
openjfx-sha: 'd44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
|
||||
- os: [self-hosted, Linux, ARM64]
|
||||
appimage-suffix: aarch64
|
||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_linux-aarch64_bin-jmods.zip'
|
||||
openjfx-sha: '871e7b9d7af16aef2e55c1b7830d0e0b2503b13dd8641374ba7e55ecb81d2ef9'
|
||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-aarch64_bin-jmods.zip'
|
||||
openjfx-sha: '3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup Java
|
||||
@@ -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,17 +80,12 @@ 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,java.compiler
|
||||
--strip-native-commands
|
||||
--no-header-files
|
||||
--no-man-pages
|
||||
--strip-debug
|
||||
--compress zip-0
|
||||
- name: Prepare additional launcher
|
||||
run: envsubst '${SEMVER_STR} ${REVISION_NUM}' < dist/linux/launcher-gtk2.properties > launcher-gtk2.properties
|
||||
env:
|
||||
SEMVER_STR: ${{ needs.get-version.outputs.semVerStr }}
|
||||
REVISION_NUM: ${{ needs.get-version.outputs.revNum }}
|
||||
- name: Run jpackage
|
||||
run: >
|
||||
${JAVA_HOME}/bin/jpackage
|
||||
@@ -173,8 +168,8 @@ jobs:
|
||||
cryptomator-*.asc
|
||||
if-no-files-found: error
|
||||
- name: Publish AppImage on GitHub Releases
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
uses: softprops/action-gh-release@v1
|
||||
if: startsWith(github.ref, 'refs/tags/') && github.event.action == 'published'
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
fail_on_unmatched_files: true
|
||||
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||
|
||||
@@ -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 }}
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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.2+9'
|
||||
COFFEELIBS_JDK: 22
|
||||
COFFEELIBS_JDK_VERSION: '22.0.2+9-0ppa1'
|
||||
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-x64_bin-jmods.zip'
|
||||
OPENJFX_JMODS_AMD64_HASH: 'd44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
|
||||
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-aarch64_bin-jmods.zip'
|
||||
OPENJFX_JMODS_AARCH64_HASH: '3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -44,7 +44,7 @@ jobs:
|
||||
run: |
|
||||
sudo add-apt-repository ppa:coffeelibs/openjdk
|
||||
sudo apt-get update
|
||||
sudo apt-get install debhelper devscripts dput coffeelibs-jdk-${{ env.COFFEELIBS_JDK }}=${{ env.COFFEELIBS_JDK_VERSION }} libgtk2.0-0
|
||||
sudo apt-get install debhelper devscripts dput coffeelibs-jdk-${{ env.COFFEELIBS_JDK }}=${{ env.COFFEELIBS_JDK_VERSION }}
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
@@ -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: |
|
||||
@@ -142,10 +142,9 @@ jobs:
|
||||
- name: Publish on PPA
|
||||
if: inputs.dput
|
||||
run: dput ppa:sebastian-stenzel/cryptomator-beta cryptomator_*_source.changes
|
||||
|
||||
# If ref is a tag, also upload to GitHub Releases:
|
||||
- name: Publish Debian package on GitHub Releases
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
if: startsWith(github.ref, 'refs/tags/') && inputs.dput
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||
run: |
|
||||
|
||||
@@ -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 }}
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
name: Create PR for flathub
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag:
|
||||
description: 'Release tag'
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
get-version:
|
||||
uses: ./.github/workflows/get-version.yml
|
||||
with:
|
||||
version: ${{ inputs.tag }}
|
||||
tarball:
|
||||
name: Determines tarball url and compute checksum
|
||||
runs-on: ubuntu-latest
|
||||
needs: [get-version]
|
||||
if: github.event_name == 'workflow_dispatch' || needs.get-version.outputs.versionType == 'stable'
|
||||
outputs:
|
||||
url: ${{ steps.url.outputs.url}}
|
||||
sha512: ${{ steps.sha512.outputs.sha512}}
|
||||
steps:
|
||||
- name: Determine tarball url
|
||||
id: url
|
||||
run: |
|
||||
URL="";
|
||||
if [[ -n "${{ inputs.tag }}" ]]; then
|
||||
URL="https://github.com/cryptomator/cryptomator/archive/refs/tags/${{ inputs.tag }}.tar.gz"
|
||||
else
|
||||
URL="https://github.com/cryptomator/cryptomator/archive/refs/tags/${{ github.event.release.tag_name }}.tar.gz"
|
||||
fi
|
||||
echo "url=${URL}" >> "$GITHUB_OUTPUT"
|
||||
- name: Download source tarball and compute checksum
|
||||
id: sha512
|
||||
run: |
|
||||
curl --silent --fail-with-body -L -H "Accept: application/vnd.github+json" ${{ steps.url.outputs.url }} --output cryptomator.tar.gz
|
||||
TARBALL_SHA512=$(sha512sum cryptomator.tar.gz | cut -d ' ' -f1)
|
||||
echo "sha512=${TARBALL_SHA512}" >> "$GITHUB_OUTPUT"
|
||||
flathub:
|
||||
name: Create PR for flathub
|
||||
runs-on: ubuntu-latest
|
||||
needs: [tarball, get-version]
|
||||
env:
|
||||
FLATHUB_PR_URL: tbd
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
repository: 'flathub/org.cryptomator.Cryptomator'
|
||||
token: ${{ secrets.CRYPTOBOT_WINGET_TOKEN }}
|
||||
- name: Checkout release branch
|
||||
run: |
|
||||
git checkout -b release/${{ needs.get-version.outputs.semVerStr }}
|
||||
- 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;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: |
|
||||
git config user.name "${{ github.actor }}"
|
||||
git config user.email "${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com"
|
||||
git config push.autoSetupRemote true
|
||||
git stage .
|
||||
git commit -m "Prepare release ${{needs.get-version.outputs.semVerStr}}"
|
||||
git push
|
||||
- name: Create pull request
|
||||
run: |
|
||||
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:
|
||||
GH_TOKEN: ${{ secrets.CRYPTOBOT_WINGET_TOKEN }}
|
||||
- name: Slack Notification
|
||||
uses: rtCamp/action-slack-notify@v2
|
||||
if: github.event_name == 'release'
|
||||
env:
|
||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||
SLACK_USERNAME: 'Cryptobot'
|
||||
SLACK_ICON: false
|
||||
SLACK_ICON_EMOJI: ':bot:'
|
||||
SLACK_CHANNEL: 'cryptomator-desktop'
|
||||
SLACK_TITLE: "Flathub release PR created for ${{ github.event.repository.name }} ${{ github.event.release.tag_name }} created."
|
||||
SLACK_MESSAGE: "See <${{ env.FLATHUB_PR_URL }}|PR> on how to proceed.>."
|
||||
SLACK_FOOTER: false
|
||||
MSG_MINIMAL: true
|
||||
@@ -23,7 +23,7 @@ on:
|
||||
|
||||
env:
|
||||
JAVA_DIST: 'zulu'
|
||||
JAVA_VERSION: 21
|
||||
JAVA_VERSION: 22
|
||||
|
||||
jobs:
|
||||
determine-version:
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
if [[ $GITHUB_REF =~ refs/tags/[0-9]+\.[0-9]+\.[0-9]+.* ]]; then
|
||||
SEM_VER_STR=${GITHUB_REF##*/}
|
||||
elif [[ "${{ inputs.version }}" =~ [0-9]+\.[0-9]+\.[0-9]+.* ]]; then
|
||||
SEM_VER_STR="${{ github.event.inputs.version }}"
|
||||
SEM_VER_STR="${{ inputs.version }}"
|
||||
else
|
||||
SEM_VER_STR=`mvn help:evaluate -Dexpression=project.version -q -DforceStdout`
|
||||
fi
|
||||
@@ -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 }}
|
||||
version: ${{ steps.versions.outputs.semVerStr }}
|
||||
@@ -16,7 +16,7 @@ on:
|
||||
|
||||
env:
|
||||
JAVA_DIST: 'zulu'
|
||||
JAVA_VERSION: '21.0.2+13'
|
||||
JAVA_VERSION: '22.0.2+9'
|
||||
|
||||
jobs:
|
||||
get-version:
|
||||
@@ -32,20 +32,20 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- os: macos-11
|
||||
- os: macos-12
|
||||
architecture: x64
|
||||
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.2/openjfx-22.0.2_osx-x64_bin-jmods.zip'
|
||||
openjfx-sha: '115cb08bb59d880cfff6e51e0bf0dcc45785ed9d456b8b8425597b04da6ab3d4'
|
||||
- os: [self-hosted, macOS, ARM64]
|
||||
architecture: aarch64
|
||||
output-suffix: arm64
|
||||
xcode-path: '/Applications/Xcode_13.2.1.app'
|
||||
fuse-lib: FUSE-T
|
||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/21.0.1/openjfx-21.0.1_osx-aarch64_bin-jmods.zip'
|
||||
openjfx-sha: '7afaa1c57a6cc3c384d636e597b9a5364693e2db4aaec0a6e63d2fa964400b58'
|
||||
openjfx-url: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_osx-aarch64_bin-jmods.zip'
|
||||
openjfx-sha: '813c6748f7c99cb7a579d48b48a087b4682b1fad1fc1a4fe5f9b21cf872b15a7'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup Java
|
||||
@@ -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,java.compiler
|
||||
--strip-native-commands
|
||||
--no-header-files
|
||||
--no-man-pages
|
||||
@@ -137,12 +137,14 @@ jobs:
|
||||
mv dist/mac/resources/Cryptomator-Vault.icns Cryptomator.app/Contents/Resources/
|
||||
sed -i '' "s|###BUNDLE_SHORT_VERSION_STRING###|${VERSION_NO}|g" Cryptomator.app/Contents/Info.plist
|
||||
sed -i '' "s|###BUNDLE_VERSION###|${REVISION_NO}|g" Cryptomator.app/Contents/Info.plist
|
||||
echo -n "$PROVISIONING_PROFILE_BASE64" | base64 --decode --output Cryptomator.app/Contents/embedded.provisionprofile
|
||||
env:
|
||||
VERSION_NO: ${{ needs.get-version.outputs.semVerNum }}
|
||||
REVISION_NO: ${{ needs.get-version.outputs.revNum }}
|
||||
PROVISIONING_PROFILE_BASE64: ${{ secrets.MACOS_PROVISIONING_PROFILE_BASE64 }}
|
||||
- name: Generate license for dmg
|
||||
run: >
|
||||
mvn -B 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 +177,7 @@ jobs:
|
||||
run: |
|
||||
echo "Codesigning jdk files..."
|
||||
find Cryptomator.app/Contents/runtime/Contents/Home/lib/ -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
|
||||
find Cryptomator.app/Contents/runtime/Contents/Home/lib/ -name 'jspawnhelper' -exec codesign --force -o runtime -s ${CODESIGN_IDENTITY} {} \;
|
||||
find Cryptomator.app/Contents/runtime/Contents/Home/lib/ \( -name 'jspawnhelper' -o -name 'pauseengine' -o -name 'simengine' \) -exec codesign --force -o runtime -s ${CODESIGN_IDENTITY} {} \;
|
||||
echo "Codesigning jar contents..."
|
||||
find Cryptomator.app/Contents/runtime/Contents/MacOS -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
|
||||
for JAR_PATH in `find Cryptomator.app -name "*.jar"`; do
|
||||
@@ -194,9 +196,12 @@ jobs:
|
||||
fi
|
||||
done
|
||||
echo "Codesigning Cryptomator.app..."
|
||||
sed -i '' "s|###APP_IDENTIFIER_PREFIX###|${TEAM_IDENTIFIER}.|g" dist/mac/Cryptomator.entitlements
|
||||
sed -i '' "s|###TEAM_IDENTIFIER###|${TEAM_IDENTIFIER}|g" dist/mac/Cryptomator.entitlements
|
||||
codesign --force --deep --entitlements dist/mac/Cryptomator.entitlements -o runtime -s ${CODESIGN_IDENTITY} Cryptomator.app
|
||||
env:
|
||||
CODESIGN_IDENTITY: ${{ secrets.MACOS_CODESIGN_IDENTITY }}
|
||||
TEAM_IDENTIFIER: ${{ secrets.MACOS_TEAM_IDENTIFIER }}
|
||||
- name: Prepare .dmg contents
|
||||
run: |
|
||||
mkdir dmg
|
||||
@@ -253,11 +258,13 @@ jobs:
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: dmg-${{ matrix.output-suffix }}
|
||||
path: Cryptomator-*.dmg
|
||||
path: |
|
||||
Cryptomator-*.dmg
|
||||
Cryptomator-*.asc
|
||||
if-no-files-found: error
|
||||
- name: Publish dmg on GitHub Releases
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
uses: softprops/action-gh-release@v1
|
||||
if: startsWith(github.ref, 'refs/tags/') && github.event.action == 'published'
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
fail_on_unmatched_files: true
|
||||
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||
|
||||
@@ -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 }}
|
||||
|
||||
@@ -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
|
||||
@@ -12,7 +12,7 @@ defaults:
|
||||
|
||||
env:
|
||||
JAVA_DIST: 'zulu'
|
||||
JAVA_VERSION: 21
|
||||
JAVA_VERSION: 22
|
||||
|
||||
jobs:
|
||||
check-preconditions:
|
||||
@@ -44,7 +44,7 @@ jobs:
|
||||
fi
|
||||
- name: Validate release in org.cryptomator.Cryptomator.metainfo.xml file
|
||||
run: |
|
||||
if ! grep -q "<release date=\".*\" version=\"${{ steps.validate-pom-version.outputs.semVerStr }}\"/>" dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml; then
|
||||
if ! grep -q "<release date=\".*\" version=\"${{ steps.validate-pom-version.outputs.semVerStr }}\">" dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml; then
|
||||
echo "Release not set in dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml"
|
||||
exit 1
|
||||
fi
|
||||
@@ -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 }}
|
||||
@@ -11,15 +11,16 @@ on:
|
||||
isDebug:
|
||||
description: 'Build debug version with console output'
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
|
||||
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.2+9'
|
||||
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_windows-x64_bin-jmods.zip'
|
||||
OPENJFX_JMODS_AMD64_HASH: 'f9376d200f5c5b85327d575c1ec1482e6455f19916577f7e2fc9be2f48bb29b6'
|
||||
WINFSP_MSI: 'https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi'
|
||||
WINFSP_UNINSTALLER: 'https://github.com/cryptomator/winfsp-uninstaller/releases/download/1.0.0/winfsp-uninstaller.exe'
|
||||
WINFSP_UNINSTALLER: 'https://github.com/cryptomator/winfsp-uninstaller/releases/latest/download/winfsp-uninstaller.exe'
|
||||
|
||||
defaults:
|
||||
run:
|
||||
@@ -39,6 +40,9 @@ jobs:
|
||||
LOOPBACK_ALIAS: 'cryptomator-vault'
|
||||
WIN_CONSOLE_FLAG: ''
|
||||
steps:
|
||||
- name: Upgrade WIX to latest version
|
||||
run: choco install wixtoolset --version 3.14.1
|
||||
shell: pwsh
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
@@ -73,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
|
||||
@@ -85,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,java.compiler
|
||||
--strip-native-commands
|
||||
--no-header-files
|
||||
--no-man-pages
|
||||
@@ -109,7 +113,7 @@ jobs:
|
||||
--copyright "(C) 2016 - 2024 Skymatic GmbH"
|
||||
--app-version "${{ needs.get-version.outputs.semVerNum }}.${{ needs.get-version.outputs.revNum }}"
|
||||
--java-options "--enable-preview"
|
||||
--java-options "--enable-native-access=org.cryptomator.jfuse.win"
|
||||
--java-options "--enable-native-access=org.cryptomator.jfuse.win,org.cryptomator.integrations.win"
|
||||
--java-options "-Xss5m"
|
||||
--java-options "-Xmx256m"
|
||||
--java-options "-Dcryptomator.appVersion=\"${{ needs.get-version.outputs.semVerStr }}\""
|
||||
@@ -170,7 +174,7 @@ jobs:
|
||||
& $env:JAVA_HOME\bin\jmod.exe extract --dir jpackage-jmod "${env:JAVA_HOME}\jmods\jdk.jpackage.jmod"
|
||||
Get-ChildItem -Recurse -Path "jpackage-jmod" -File wixhelper.dll | Select-Object -Last 1 | Copy-Item -Destination "appdir"
|
||||
- name: Codesign
|
||||
uses: skymatic/code-sign-action@v2
|
||||
uses: skymatic/code-sign-action@v3
|
||||
with:
|
||||
certificate: ${{ secrets.WIN_CODESIGN_P12_BASE64 }}
|
||||
password: ${{ secrets.WIN_CODESIGN_P12_PW }}
|
||||
@@ -195,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"
|
||||
@@ -219,7 +223,7 @@ jobs:
|
||||
--win-menu
|
||||
--win-dir-chooser
|
||||
--win-shortcut-prompt
|
||||
--win-update-url "https:\\cryptomator.org"
|
||||
--win-update-url "https:\\cryptomator.org\downloads"
|
||||
--win-menu-group Cryptomator
|
||||
--resource-dir dist/win/resources
|
||||
--license-file dist/win/resources/license.rtf
|
||||
@@ -228,7 +232,7 @@ jobs:
|
||||
JP_WIXWIZARD_RESOURCES: ${{ github.workspace }}/dist/win/resources # requires abs path, used in resources/main.wxs
|
||||
JP_WIXHELPER_DIR: ${{ github.workspace }}\appdir
|
||||
- name: Codesign MSI
|
||||
uses: skymatic/code-sign-action@v2
|
||||
uses: skymatic/code-sign-action@v3
|
||||
with:
|
||||
certificate: ${{ secrets.WIN_CODESIGN_P12_BASE64 }}
|
||||
password: ${{ secrets.WIN_CODESIGN_P12_PW }}
|
||||
@@ -253,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/')
|
||||
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
|
||||
@@ -284,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"
|
||||
@@ -325,7 +320,7 @@ jobs:
|
||||
-ib installer/unsigned/Cryptomator-Installer.exe
|
||||
-o tmp/engine.exe
|
||||
- name: Codesign burn engine
|
||||
uses: skymatic/code-sign-action@v2
|
||||
uses: skymatic/code-sign-action@v3
|
||||
with:
|
||||
certificate: ${{ secrets.WIN_CODESIGN_P12_BASE64 }}
|
||||
password: ${{ secrets.WIN_CODESIGN_P12_PW }}
|
||||
@@ -339,7 +334,7 @@ jobs:
|
||||
-ab tmp/engine.exe installer/unsigned/Cryptomator-Installer.exe
|
||||
-o installer/Cryptomator-Installer.exe
|
||||
- name: Codesign EXE
|
||||
uses: skymatic/code-sign-action@v2
|
||||
uses: skymatic/code-sign-action@v3
|
||||
with:
|
||||
certificate: ${{ secrets.WIN_CODESIGN_P12_BASE64 }}
|
||||
password: ${{ secrets.WIN_CODESIGN_P12_PW }}
|
||||
@@ -364,52 +359,61 @@ jobs:
|
||||
Cryptomator-*.exe
|
||||
Cryptomator-*.asc
|
||||
if-no-files-found: error
|
||||
|
||||
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 installers
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
merge-multiple: true
|
||||
- name: Publish .msi on GitHub Releases
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
uses: softprops/action-gh-release@v1
|
||||
id: publish
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
fail_on_unmatched_files: true
|
||||
token: ${{ secrets.CRYPTOBOT_RELEASE_TOKEN }}
|
||||
# do not change ordering of filelist, required for correct job output
|
||||
files: |
|
||||
Cryptomator-*.exe
|
||||
Cryptomator-*.asc
|
||||
*.msi
|
||||
*.exe
|
||||
*.asc
|
||||
|
||||
allowlist:
|
||||
name: Anti Virus Allowlisting
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
allowlist-msi:
|
||||
uses: ./.github/workflows/av-whitelist.yml
|
||||
needs: [publish]
|
||||
with:
|
||||
url: ${{ needs.publish.outputs.download-url-msi }}
|
||||
secrets: inherit
|
||||
|
||||
allowlist-exe:
|
||||
uses: ./.github/workflows/av-whitelist.yml
|
||||
needs: [publish]
|
||||
with:
|
||||
url: ${{ needs.publish.outputs.download-url-exe }}
|
||||
secrets: inherit
|
||||
|
||||
notify-winget:
|
||||
name: Notify for winget-release
|
||||
if: needs.get-version.outputs.versionType == 'stable'
|
||||
needs: [publish, get-version]
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build-msi, build-exe]
|
||||
steps:
|
||||
- name: Download .msi
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: msi
|
||||
path: msi
|
||||
- name: Download .exe
|
||||
uses: actions/download-artifact@v4
|
||||
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/
|
||||
- name: Slack Notification
|
||||
uses: rtCamp/action-slack-notify@v2
|
||||
env:
|
||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||
SLACK_USERNAME: 'Cryptobot'
|
||||
SLACK_ICON: false
|
||||
SLACK_ICON_EMOJI: ':bot:'
|
||||
SLACK_CHANNEL: 'cryptomator-desktop'
|
||||
SLACK_TITLE: "MSI of ${{ github.event.repository.name }} ${{ github.event.release.tag_name }} published."
|
||||
SLACK_MESSAGE: "Ready to <https://github.com/${{ github.repository }}/actions/workflows/winget.yml| release to winget>."
|
||||
SLACK_FOOTER: false
|
||||
MSG_MINIMAL: true
|
||||
@@ -0,0 +1,27 @@
|
||||
name: Publish MSI to winget-pkgs
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag:
|
||||
description: 'Release tag'
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
winget:
|
||||
name: Publish winget package
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Sync winget-pkgs fork
|
||||
run: |
|
||||
gh repo sync cryptomator/winget-pkgs -b master --force
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.CRYPTOBOT_WINGET_TOKEN }}
|
||||
- name: Submit package
|
||||
uses: vedantmgoyal2009/winget-releaser@v2
|
||||
with:
|
||||
identifier: Cryptomator.Cryptomator
|
||||
version: ${{ inputs.tag }}
|
||||
release-tag: ${{ inputs.tag }}
|
||||
installers-regex: '\.msi$'
|
||||
token: ${{ secrets.CRYPTOBOT_WINGET_TOKEN }}
|
||||
Generated
+10
-12
@@ -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>
|
||||
|
||||
Generated
+1
-1
@@ -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>
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
<configuration default="false" name="Cryptomator Windows" type="Application" factoryName="Application">
|
||||
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
|
||||
<module name="cryptomator" />
|
||||
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath="@{appdata}/Cryptomator/settings.json;@{userhome}/AppData/Roaming/Cryptomator/settings.json" -Dcryptomator.ipcSocketPath="@{localappdata}/Cryptomator/ipc.socket" -Dcryptomator.logDir="@{localappdata}/Cryptomator" -Dcryptomator.pluginDir="@{appdata}/Cryptomator/Plugins" -Dcryptomator.integrationsWin.keychainPaths="@{appdata}/Cryptomator/keychain.json;@{userhome}/AppData/Roaming/Cryptomator/keychain.json" -Dcryptomator.p12Path="@{appdata}/Cryptomator/key.p12;@{userhome}/AppData/Roaming/Cryptomator/key.p12" -Dcryptomator.mountPointsDir="@{userhome}/Cryptomator" -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win" />
|
||||
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath="@{appdata}/Cryptomator/settings.json;@{userhome}/AppData/Roaming/Cryptomator/settings.json" -Dcryptomator.ipcSocketPath="@{localappdata}/Cryptomator/ipc.socket" -Dcryptomator.logDir="@{localappdata}/Cryptomator" -Dcryptomator.pluginDir="@{appdata}/Cryptomator/Plugins" -Dcryptomator.integrationsWin.keychainPaths="@{appdata}/Cryptomator/keychain.json;@{userhome}/AppData/Roaming/Cryptomator/keychain.json" -Dcryptomator.p12Path="@{appdata}/Cryptomator/key.p12;@{userhome}/AppData/Roaming/Cryptomator/key.p12" -Dcryptomator.mountPointsDir="@{userhome}/Cryptomator" -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win,org.cryptomator.integrations.win" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
<configuration default="false" name="Cryptomator Windows Dev" type="Application" factoryName="Application">
|
||||
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
|
||||
<module name="cryptomator" />
|
||||
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath="@{appdata}/Cryptomator-Dev/settings.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/settings.json" -Dcryptomator.ipcSocketPath="@{localappdata}/Cryptomator-Dev/ipc.socket" -Dcryptomator.logDir="@{localappdata}/Cryptomator-Dev" -Dcryptomator.pluginDir="@{appdata}/Cryptomator-Dev/Plugins" -Dcryptomator.integrationsWin.keychainPaths="@{appdata}/Cryptomator-Dev/keychain.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/keychain.json" -Dcryptomator.p12Path="@{appdata}/Cryptomator-Dev/key.p12;@{userhome}/AppData/Roaming/Cryptomator-Dev/key.p12" -Dcryptomator.mountPointsDir="@{userhome}/Cryptomator-Dev" -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win" />
|
||||
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath="@{appdata}/Cryptomator-Dev/settings.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/settings.json" -Dcryptomator.ipcSocketPath="@{localappdata}/Cryptomator-Dev/ipc.socket" -Dcryptomator.logDir="@{localappdata}/Cryptomator-Dev" -Dcryptomator.pluginDir="@{appdata}/Cryptomator-Dev/Plugins" -Dcryptomator.integrationsWin.keychainPaths="@{appdata}/Cryptomator-Dev/keychain.json;@{userhome}/AppData/Roaming/Cryptomator-Dev/keychain.json" -Dcryptomator.p12Path="@{appdata}/Cryptomator-Dev/key.p12;@{userhome}/AppData/Roaming/Cryptomator-Dev/key.p12" -Dcryptomator.mountPointsDir="@{userhome}/Cryptomator-Dev" -Dcryptomator.showTrayIcon=true -Xss2m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.win,org.cryptomator.integrations.win" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
</envs>
|
||||
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
|
||||
<module name="cryptomator" />
|
||||
<option name="VM_PARAMETERS" value="-Dapple.awt.enableTemplateImages=true -Dcryptomator.settingsPath="@{userhome}/Library/Application Support/Cryptomator-Dev/settings.json" -Dcryptomator.p12Path="@{userhome}/Library/Application Support/Cryptomator-Dev/key.p12" -Dcryptomator.ipcSocketPath="@{userhome}/Library/Application Support/Cryptomator-Dev/ipc.socket" -Dcryptomator.logDir="@{userhome}/Library/Logs/Cryptomator-Dev" -Dcryptomator.pluginDir="@{userhome}/Library/Application Support/Cryptomator-Dev/Plugins" -Dcryptomator.mountPointsDir="@{userhome}/Cryptomator" -Dcryptomator.showTrayIcon=true -Dcryptomator.integrationsMac.keychainServiceName=Cryptomator -Xss2m -Xmx512m -ea --enable-preview --enable-native-access=org.cryptomator.jfuse.mac" />
|
||||
<option name="VM_PARAMETERS" value="-Dapple.awt.enableTemplateImages=true -Dcryptomator.settingsPath="@{userhome}/Library/Application Support/Cryptomator-Dev/settings.json" -Dcryptomator.p12Path="@{userhome}/Library/Application Support/Cryptomator-Dev/key.p12" -Dcryptomator.ipcSocketPath="@{userhome}/Library/Application Support/Cryptomator-Dev/ipc.socket" -Dcryptomator.logDir="@{userhome}/Library/Logs/Cryptomator-Dev" -Dcryptomator.pluginDir="@{userhome}/Library/Application Support/Cryptomator-Dev/Plugins" -Dcryptomator.mountPointsDir="@{userhome}/Library/Application Support/Cryptomator-Dev/mnt" -Dcryptomator.showTrayIcon=true -Dcryptomator.integrationsMac.keychainServiceName=Cryptomator -Xss2m -Xmx512m -ea --enable-preview --enable-native-access=org.cryptomator.jfuse.mac" />
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
|
||||
@@ -31,9 +31,7 @@ Cryptomator is provided free of charge as an open-source project despite the hig
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="https://mowcapital.com/"><img src="https://cryptomator.org/img/sponsors/mowcapital.svg" alt="Mow Capital" height="28"></a></td>
|
||||
<td><a href="https://www.easeus.com/"><img src="https://cryptomator.org/img/sponsors/easeus.png" alt="EaseUS" height="40"></a></td>
|
||||
<td><a href="https://www.hassmann-it-forensik.de/"><img src="https://cryptomator.org/img/sponsors/hassmannitforensik.png" alt="Hassmann IT-Forensik" height="40"></a></td>
|
||||
<td><a href="https://ente.io/"><img src="https://cryptomator.org/img/sponsors/ente.svg" alt="Ente" height="58"></a></td>
|
||||
<td><a href="https://www.route4me.com/"><img src="https://cryptomator.org/img/sponsors/route4me.svg" alt="Route4Me" height="56"></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -86,7 +84,7 @@ For more information on the security details visit [cryptomator.org](https://doc
|
||||
|
||||
### Dependencies
|
||||
|
||||
* JDK 21 (e.g. temurin, zulu)
|
||||
* JDK 22 (e.g. temurin, zulu)
|
||||
* Maven 3
|
||||
|
||||
### Run Maven
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
# created during build
|
||||
# downloaded/created during build
|
||||
openjfx-jmods.zip
|
||||
*.jmod
|
||||
Cryptomator.AppDir
|
||||
*.AppImage
|
||||
*.AppImage.zsync
|
||||
Vendored
+25
-27
@@ -12,40 +12,40 @@ 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.2
|
||||
JAVAFX_ARCH="x64"
|
||||
JAVAFX_JMODS_SHA256='d44bff3b94d5668fdee18a938d7b1269026d663d44765f02d29a9bdfd3fa1eb0'
|
||||
if [ "${CPU_ARCH}" = "aarch64" ]; then
|
||||
JAVAFX_ARCH="aarch64"
|
||||
JAVAFX_JMODS_SHA256='3d5457136690c4f5bb9522d38b45218e045bdac13c24aa4c808c7c8d17d039c7'
|
||||
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-${JAVAFX_VERSION}_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 -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)
|
||||
unzip -o -j openjfx-jmods.zip \*/javafx.base.jmod \*/javafx.controls.jmod \*/javafx.fxml.jmod \*/javafx.graphics.jmod -d openjfx-jmods
|
||||
JMOD_VERSION=$(jmod describe ./openjfx-jmods/javafx.base.jmod | head -1)
|
||||
JMOD_VERSION=${JMOD_VERSION#*@}
|
||||
JMOD_VERSION=${JMOD_VERSION%%.*}
|
||||
POM_JFX_VERSION=$(mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
|
||||
POM_JFX_VERSION=$(mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout -B -f ../../../pom.xml)
|
||||
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
|
||||
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
|
||||
if [ $POM_JFX_VERSION -ne $JMOD_VERSION_AMD64 ]; then
|
||||
if [ $POM_JFX_VERSION -ne $JMOD_VERSION ]; then
|
||||
>&2 echo "Major JavaFX version in pom.xml (${POM_JFX_VERSION}) != amd64 jmod version (${JMOD_VERSION})"
|
||||
exit 1
|
||||
fi
|
||||
@@ -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,java.compiler \
|
||||
--strip-native-commands \
|
||||
--no-header-files \
|
||||
--no-man-pages \
|
||||
@@ -64,7 +64,6 @@ ${JAVA_HOME}/bin/jlink \
|
||||
--compress zip-0
|
||||
|
||||
# create app dir
|
||||
envsubst '${SEMVER_STR} ${REVISION_NUM}' < ../launcher-gtk2.properties > launcher-gtk2.properties
|
||||
${JAVA_HOME}/bin/jpackage \
|
||||
--verbose \
|
||||
--type app-image \
|
||||
@@ -92,7 +91,6 @@ ${JAVA_HOME}/bin/jpackage \
|
||||
--java-options "-Dcryptomator.showTrayIcon=true" \
|
||||
--java-options "-Dcryptomator.integrationsLinux.trayIconsDir=\"@{appdir}/usr/share/icons/hicolor/symbolic/apps\"" \
|
||||
--java-options "-Dcryptomator.buildNumber=\"appimage-${REVISION_NO}\"" \
|
||||
--add-launcher cryptomator-gtk2=launcher-gtk2.properties \
|
||||
--resource-dir ../resources
|
||||
|
||||
# transform AppDir
|
||||
@@ -116,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 launcher-gtk2.properties /tmp/appimagetool.AppImage openjfx-jmods.zip"
|
||||
echo >&2 "To clean up, run: rm -rf Cryptomator.AppDir appdir runtime squashfs-root openjfx-jmods; rm /tmp/appimagetool.AppImage openjfx-jmods.zip"
|
||||
echo ""
|
||||
|
||||
+123
-44
@@ -5,26 +5,27 @@
|
||||
<metadata_license>FSFAP</metadata_license>
|
||||
<project_license>GPL-3.0-or-later</project_license>
|
||||
<name>Cryptomator</name>
|
||||
<summary>Multi-platform client-side encryption tool optimized for cloud storages</summary>
|
||||
<summary>Encryption made easy and optimized for the cloud</summary>
|
||||
|
||||
<description>
|
||||
<p>
|
||||
Cryptomator provides transparent, client-side encryption for your cloud. Protect your documents from unauthorized
|
||||
access. Cryptomator is free and open source software, so you can rest assured there are no backdoors.
|
||||
Cryptomator provides easy-to-use, transparent, client-side encryption for your cloud.
|
||||
It protects your documents from unauthorized access and prying eyes, while you will still be able to view and edit your documents locally.
|
||||
By not requiring any registration or account and performing all encryption locally, it gives you back control over your data and ensures your privacy.
|
||||
Cryptomator is offered for all major platforms (including Android and iOS).
|
||||
</p>
|
||||
<p>
|
||||
Cryptomator encrypts file contents and names using AES. Your passphrase is protected against bruteforcing attempts
|
||||
using scrypt. Directory structures get obfuscated. The only thing which cannot be encrypted without breaking your
|
||||
cloud synchronization is the modification date of your files.
|
||||
Cryptomator encrypts file contents and names using the widespread industry standard AES.
|
||||
Your passphrase is protected against brute forcing attempts using scrypt.
|
||||
Additionally, directory structures get obfuscated.
|
||||
For more info about the Cryptomator encryption scheme, check out the online documentation.
|
||||
</p>
|
||||
<p>
|
||||
Cryptomator is a free and open source software licensed under the GPLv3. This allows anyone to check our code. It
|
||||
is impossible to introduce backdoors for third parties. Also we cannot hide vulnerabilities. And the best thing
|
||||
is: There is no need to trust us, as you can control us!
|
||||
</p>
|
||||
<p>
|
||||
Vendor lock-ins are impossible. Even if we decided to stop development: The source code is already cloned by
|
||||
hundreds of other developers. As you don't need an account, you will never stand in front of locked doors.
|
||||
Cryptomator is a free and open-source software licensed under the GPLv3.
|
||||
This allows anyone to check our code.
|
||||
Thus, it is impossible to introduce backdoors for third parties or to hide vulnerabilities, so you do not need to trust Cryptomator.
|
||||
Also, vendor lock-ins are impossible.
|
||||
Even if we decided to stop development: The source code is already cloned by hundreds of other developers and development can be picked up by others.
|
||||
</p>
|
||||
</description>
|
||||
|
||||
@@ -42,7 +43,7 @@
|
||||
</provides>
|
||||
|
||||
<screenshots>
|
||||
<screenshot>
|
||||
<screenshot type="default">
|
||||
<caption>Light theme</caption>
|
||||
<image>https://user-images.githubusercontent.com/11858409/156986109-6e58f59c-8b8c-4501-b33b-bb1e33007cea.png</image>
|
||||
</screenshot>
|
||||
@@ -52,47 +53,125 @@
|
||||
</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>
|
||||
<url type="faq">https://community.cryptomator.org/c/kb/faq</url>
|
||||
<url type="help">https://community.cryptomator.org/</url>
|
||||
<url type="help">https://docs.cryptomator.org/</url>
|
||||
<url type="translate">https://translate.cryptomator.org</url>
|
||||
|
||||
<developer_name>Skymatic GmbH</developer_name>
|
||||
<developer id="de.skymatic">
|
||||
<name>Skymatic GmbH</name>
|
||||
</developer>
|
||||
|
||||
<content_rating type="oars-1.1">
|
||||
<content_attribute id="social-info">mild</content_attribute> <!-- update checker connects to https://api.cryptomator.org/updates/latestVersion.json -->
|
||||
</content_rating>
|
||||
|
||||
<releases>
|
||||
<release date="2024-02-07" version="1.12.1"/>
|
||||
<release date="2024-02-06" version="1.12.0"/>
|
||||
<release date="2023-12-05" version="1.11.1"/>
|
||||
<release date="2023-11-08" version="1.11.0"/>
|
||||
<release date="2023-09-20" version="1.10.1"/>
|
||||
<release date="2023-09-11" version="1.10.0"/>
|
||||
<release date="2023-08-11" version="1.9.4"/>
|
||||
<release date="2023-08-07" version="1.9.3"/>
|
||||
<release date="2023-07-24" version="1.9.2"/>
|
||||
<release date="2023-06-07" version="1.9.1"/>
|
||||
<release date="2023-05-30" version="1.9.0"/>
|
||||
<release date="2023-04-25" version="1.8.0"/>
|
||||
<release date="2023-04-07" version="1.7.5"/>
|
||||
<release date="2023-04-05" version="1.7.4"/>
|
||||
<release date="2023-03-15" version="1.7.3"/>
|
||||
<release date="2023-03-07" version="1.7.2"/>
|
||||
<release date="2023-03-03" version="1.7.1"/>
|
||||
<release date="2023-03-01" version="1.7.0"/>
|
||||
<release date="2022-12-14" version="1.6.17"/>
|
||||
<release date="2022-12-06" version="1.6.16"/>
|
||||
<release date="2022-10-06" version="1.6.15"/>
|
||||
<release date="2022-08-31" version="1.6.14"/>
|
||||
<release date="2022-07-27" version="1.6.12"/>
|
||||
<release date="2022-07-26" version="1.6.11"/>
|
||||
<release date="2022-05-03" version="1.6.10"/>
|
||||
<release date="2022-04-27" version="1.6.9"/>
|
||||
<release date="2022-03-30" version="1.6.8"/>
|
||||
<release date="2021-12-16" version="1.6.5"/>
|
||||
<release date="2024-09-17" version="1.14.0">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.14.0</url>
|
||||
</release>
|
||||
<release date="2024-06-26" version="1.13.0">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.13.0</url>
|
||||
</release>
|
||||
<release date="2024-03-27" version="1.12.4">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.12.4</url>
|
||||
</release>
|
||||
<release date="2024-02-27" version="1.12.3">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.12.3</url>
|
||||
</release>
|
||||
<release date="2024-02-09" version="1.12.2">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.12.2</url>
|
||||
</release>
|
||||
<release date="2024-02-07" version="1.12.1">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.12.1</url>
|
||||
</release>
|
||||
<release date="2024-02-06" version="1.12.0">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.12.0</url>
|
||||
</release>
|
||||
<release date="2023-12-05" version="1.11.1">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.11.1</url>
|
||||
</release>
|
||||
<release date="2023-11-08" version="1.11.0">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.11.0</url>
|
||||
</release>
|
||||
<release date="2023-09-20" version="1.10.1">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.10.1</url>
|
||||
</release>
|
||||
<release date="2023-09-11" version="1.10.0">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.10.0</url>
|
||||
</release>
|
||||
<release date="2023-08-11" version="1.9.4">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.9.4</url>
|
||||
</release>
|
||||
<release date="2023-08-07" version="1.9.3">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.9.3</url>
|
||||
</release>
|
||||
<release date="2023-07-24" version="1.9.2">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.9.2</url>
|
||||
</release>
|
||||
<release date="2023-06-07" version="1.9.1">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.9.1</url>
|
||||
</release>
|
||||
<release date="2023-05-30" version="1.9.0">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.9.0</url>
|
||||
</release>
|
||||
<release date="2023-04-25" version="1.8.0">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.8.0</url>
|
||||
</release>
|
||||
<release date="2023-04-07" version="1.7.5">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.7.5</url>
|
||||
</release>
|
||||
<release date="2023-04-05" version="1.7.4">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.7.4</url>
|
||||
</release>
|
||||
<release date="2023-03-15" version="1.7.3">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.7.3</url>
|
||||
</release>
|
||||
<release date="2023-03-07" version="1.7.2">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.7.2</url>
|
||||
</release>
|
||||
<release date="2023-03-03" version="1.7.1">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.7.1</url>
|
||||
</release>
|
||||
<release date="2023-03-01" version="1.7.0">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.7.0</url>
|
||||
</release>
|
||||
<release date="2022-12-14" version="1.6.17">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.6.17</url>
|
||||
</release>
|
||||
<release date="2022-12-06" version="1.6.16">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.6.16</url>
|
||||
</release>
|
||||
<release date="2022-10-06" version="1.6.15">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.6.15</url>
|
||||
</release>
|
||||
<release date="2022-08-31" version="1.6.14">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.6.14</url>
|
||||
</release>
|
||||
<release date="2022-07-27" version="1.6.12">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.6.12</url>
|
||||
</release>
|
||||
<release date="2022-07-26" version="1.6.11">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.6.11</url>
|
||||
</release>
|
||||
<release date="2022-05-03" version="1.6.10">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.6.10</url>
|
||||
</release>
|
||||
<release date="2022-04-27" version="1.6.9">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.6.9</url>
|
||||
</release>
|
||||
<release date="2022-03-30" version="1.6.8">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.6.8</url>
|
||||
</release>
|
||||
<release date="2021-12-16" version="1.6.5">
|
||||
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.6.5</url>
|
||||
</release>
|
||||
</releases>
|
||||
</component>
|
||||
|
||||
Vendored
+1
-1
@@ -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), libgtk2.0-0, 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
|
||||
|
||||
Vendored
+3
-2
@@ -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,java.compiler \
|
||||
--strip-native-commands \
|
||||
--no-header-files \
|
||||
--no-man-pages \
|
||||
@@ -61,6 +61,7 @@ override_dh_auto_build:
|
||||
--java-options "-Dcryptomator.buildNumber=\"deb-${REVISION_NUM}\"" \
|
||||
--java-options "-Dcryptomator.appVersion=\"${SEMVER_STR}\"" \
|
||||
--java-options "-Dcryptomator.disableUpdateCheck=\"${DISABLE_UPDATE_CHECK}\"" \
|
||||
--java-options "-Dcryptomator.integrationsLinux.autoStartCmd=\"cryptomator\"" \
|
||||
--app-version "${VERSION_NUM}.${REVISION_NUM}" \
|
||||
--resource-dir resources \
|
||||
--verbose
|
||||
|
||||
Vendored
-14
@@ -1,14 +0,0 @@
|
||||
java-options=-Xss5m \
|
||||
-Xmx256m \
|
||||
--enable-preview \
|
||||
--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64 \
|
||||
-Dfile.encoding=\"utf-8\" \
|
||||
-Dcryptomator.appVersion=\"${SEMVER_STR}\" \
|
||||
-Dcryptomator.logDir=\"~/.local/share/Cryptomator/logs\" \
|
||||
-Dcryptomator.pluginDir=\"~/.local/share/Cryptomator/plugins\" \
|
||||
-Dcryptomator.settingsPath=\"~/.config/Cryptomator/settings.json:~/.Cryptomator/settings.json\" \
|
||||
-Dcryptomator.ipcSocketPath=\"~/.config/Cryptomator/ipc.socket\" \
|
||||
-Dcryptomator.mountPointsDir=\"~/.local/share/Cryptomator/mnt\" \
|
||||
-Dcryptomator.showTrayIcon=false \
|
||||
-Dcryptomator.buildNumber=\"appimage-${REVISION_NUM}\" \
|
||||
-Djdk.gtk.version=2
|
||||
@@ -0,0 +1 @@
|
||||
embedded.provisionprofile
|
||||
Vendored
+8
@@ -2,6 +2,10 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.application-identifier</key>
|
||||
<string>###APP_IDENTIFIER_PREFIX###org.cryptomator</string>
|
||||
<key>com.apple.developer.team-identifier</key>
|
||||
<string>###TEAM_IDENTIFIER###</string>
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||
@@ -10,5 +14,9 @@
|
||||
<true/>
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<true/>
|
||||
<key>keychain-access-groups</key>
|
||||
<array>
|
||||
<string>###APP_IDENTIFIER_PREFIX###org.cryptomator</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
# created during build
|
||||
# downloaded/created during build
|
||||
Cryptomator.app/
|
||||
runtime/
|
||||
dmg/
|
||||
*.dmg
|
||||
license.rtf
|
||||
license.rtf
|
||||
openjfx-jmods.zip
|
||||
*.jmod
|
||||
Cryptomator.entitlements
|
||||
|
||||
Vendored
+28
-12
@@ -1,12 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
# parse options
|
||||
usage() { echo "Usage: $0 [-s <codesign-identity>]" 1>&2; exit 1; }
|
||||
while getopts ":s:" o; do
|
||||
usage() { echo "Usage: $0 [-s <codesign-identity>] [-t <team-identifier>]" 1>&2; exit 1; }
|
||||
while getopts ":s:t:" o; do
|
||||
case "${o}" in
|
||||
s)
|
||||
CODESIGN_IDENTITY=${OPTARG}
|
||||
;;
|
||||
t)
|
||||
TEAM_IDENTIFIER=${OPTARG}
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
@@ -29,13 +32,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_VERSION=22.0.2
|
||||
JAVAFX_ARCH="undefined"
|
||||
JAVAFX_JMODS_SHA256="undefined"
|
||||
if [ "$(machine)" = "arm64e" ]; then
|
||||
ARCH="aarch64"
|
||||
JAVAFX_ARCH="aarch64"
|
||||
JAVAFX_JMODS_SHA256="813c6748f7c99cb7a579d48b48a087b4682b1fad1fc1a4fe5f9b21cf872b15a7"
|
||||
else
|
||||
ARCH="x64"
|
||||
JAVAFX_ARCH="x64"
|
||||
JAVAFX_JMODS_SHA256="115cb08bb59d880cfff6e51e0bf0dcc45785ed9d456b8b8425597b04da6ab3d4"
|
||||
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 +54,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 +71,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 +79,7 @@ cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods
|
||||
${JAVA_HOME}/bin/jlink \
|
||||
--output runtime \
|
||||
--module-path "${JAVA_HOME}/jmods:openjfx-jmods" \
|
||||
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.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,java.compiler \
|
||||
--strip-native-commands \
|
||||
--no-header-files \
|
||||
--no-man-pages \
|
||||
@@ -116,9 +124,10 @@ ${JAVA_HOME}/bin/jpackage \
|
||||
cp ../resources/${APP_NAME}-Vault.icns ${APP_NAME}.app/Contents/Resources/
|
||||
sed -i '' "s|###BUNDLE_SHORT_VERSION_STRING###|${VERSION_NO}|g" ${APP_NAME}.app/Contents/Info.plist
|
||||
sed -i '' "s|###BUNDLE_VERSION###|${REVISION_NO}|g" ${APP_NAME}.app/Contents/Info.plist
|
||||
cp ../embedded.provisionprofile ${APP_NAME}.app/Contents/
|
||||
|
||||
# generate license
|
||||
mvn -B -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 \
|
||||
@@ -128,7 +137,11 @@ mvn -B -f../../../pom.xml license:add-third-party \
|
||||
-Dlicense.licenseMergesUrl=file://$(pwd)/../../../license/merges
|
||||
|
||||
# codesign
|
||||
if [ -n "${CODESIGN_IDENTITY}" ]; then
|
||||
if [ -n "${CODESIGN_IDENTITY}" ] && [ -n "${TEAM_IDENTIFIER}" ]; then
|
||||
echo "Codesigning jdk files..."
|
||||
find ${APP_NAME}.app/Contents/runtime/Contents/Home/lib/ -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
|
||||
find ${APP_NAME}.app/Contents/runtime/Contents/Home/lib/ -name 'jspawnhelper' -exec codesign --force -o runtime -s ${CODESIGN_IDENTITY} {} \;
|
||||
echo "Codesigning jar contents..."
|
||||
find ${APP_NAME}.app/Contents/runtime/Contents/MacOS -name '*.dylib' -exec codesign --force -s ${CODESIGN_IDENTITY} {} \;
|
||||
for JAR_PATH in `find ${APP_NAME}.app -name "*.jar"`; do
|
||||
if [[ `unzip -l ${JAR_PATH} | grep '.dylib\|.jnilib'` ]]; then
|
||||
@@ -146,7 +159,10 @@ if [ -n "${CODESIGN_IDENTITY}" ]; then
|
||||
fi
|
||||
done
|
||||
echo "Codesigning ${APP_NAME}.app..."
|
||||
codesign --force --deep --entitlements ../${APP_NAME}.entitlements -o runtime -s ${CODESIGN_IDENTITY} ${APP_NAME}.app
|
||||
cp ../${APP_NAME}.entitlements .
|
||||
sed -i '' "s|###APP_IDENTIFIER_PREFIX###|${TEAM_IDENTIFIER}.|g" ${APP_NAME}.entitlements
|
||||
sed -i '' "s|###TEAM_IDENTIFIER###|${TEAM_IDENTIFIER}|g" ${APP_NAME}.entitlements
|
||||
codesign --force --deep --entitlements ${APP_NAME}.entitlements -o runtime -s ${CODESIGN_IDENTITY} ${APP_NAME}.app
|
||||
fi
|
||||
|
||||
# prepare dmg contents
|
||||
|
||||
Vendored
+1
-1
@@ -3,7 +3,7 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.13.0</string>
|
||||
<string>11</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleAllowMixedLocalizations</key>
|
||||
|
||||
@@ -6,4 +6,5 @@ installer
|
||||
*.msi
|
||||
*.exe
|
||||
*.jmod
|
||||
resources/jfxJmods.zip
|
||||
license.rtf
|
||||
Vendored
+18
-17
@@ -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.2'
|
||||
$javaFxJmodsUrl = "https://download2.gluonhq.com/openjfx/${javaFxVersion}/openjfx-${javaFxVersion}_windows-x64_bin-jmods.zip"
|
||||
$javaFxJmodsSHA256 = 'f9376d200f5c5b85327d575c1ec1482e6455f19916577f7e2fc9be2f48bb29b6'
|
||||
$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,java.compiler,javafx.base,javafx.graphics,javafx.controls,javafx.fxml `
|
||||
--strip-native-commands `
|
||||
--no-header-files `
|
||||
--no-man-pages `
|
||||
@@ -99,7 +100,7 @@ if ($clean -and (Test-Path -Path $appPath)) {
|
||||
--vendor $Vendor `
|
||||
--copyright $copyright `
|
||||
--java-options "--enable-preview" `
|
||||
--java-options "--enable-native-access=org.cryptomator.jfuse.win" `
|
||||
--java-options "--enable-native-access=org.cryptomator.jfuse.win,org.cryptomator.integrations.win" `
|
||||
--java-options "-Xss5m" `
|
||||
--java-options "-Xmx256m" `
|
||||
--java-options "-Dcryptomator.appVersion=`"$semVerNo`"" `
|
||||
@@ -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\" `
|
||||
@@ -181,7 +182,7 @@ Write-Output "Downloading ${winfspMsiUrl}..."
|
||||
Invoke-WebRequest $winfspMsiUrl -OutFile ".\bundle\resources\winfsp.msi" # redirects are followed by default
|
||||
|
||||
# download legacy-winfsp uninstaller
|
||||
$winfspUninstaller= 'https://github.com/cryptomator/winfsp-uninstaller/releases/download/1.0.0/winfsp-uninstaller.exe'
|
||||
$winfspUninstaller= 'https://github.com/cryptomator/winfsp-uninstaller/releases/latest/download/winfsp-uninstaller.exe'
|
||||
Write-Output "Downloading ${winfspUninstaller}..."
|
||||
Invoke-WebRequest $winfspUninstaller -OutFile ".\bundle\resources\winfsp-uninstaller.exe" # redirects are followed by default
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
Vendored
-6
@@ -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>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.cryptomator</groupId>
|
||||
<artifactId>cryptomator</artifactId>
|
||||
<version>1.12.1</version>
|
||||
<version>1.14.1</version>
|
||||
<name>Cryptomator Desktop App</name>
|
||||
|
||||
<organization>
|
||||
@@ -26,56 +26,60 @@
|
||||
|
||||
<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) -->
|
||||
<nonModularGroupIds>org.ow2.asm,org.apache.jackrabbit,org.apache.httpcomponents</nonModularGroupIds>
|
||||
|
||||
<!-- cryptomator dependencies -->
|
||||
<cryptomator.cryptofs.version>2.6.8</cryptomator.cryptofs.version>
|
||||
<cryptomator.integrations.version>1.3.0</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.3</cryptomator.integrations.linux.version>
|
||||
<cryptomator.fuse.version>4.0.0</cryptomator.fuse.version>
|
||||
<cryptomator.dokany.version>2.0.0</cryptomator.dokany.version>
|
||||
<cryptomator.webdav.version>2.0.6</cryptomator.webdav.version>
|
||||
<cryptomator.cryptofs.version>2.7.1-beta1</cryptomator.cryptofs.version>
|
||||
<cryptomator.integrations.version>1.4.0</cryptomator.integrations.version>
|
||||
<cryptomator.integrations.win.version>1.3.0</cryptomator.integrations.win.version>
|
||||
<cryptomator.integrations.mac.version>1.2.4</cryptomator.integrations.mac.version>
|
||||
<cryptomator.integrations.linux.version>1.5.1</cryptomator.integrations.linux.version>
|
||||
<cryptomator.fuse.version>5.0.2</cryptomator.fuse.version>
|
||||
<cryptomator.webdav.version>2.0.7</cryptomator.webdav.version>
|
||||
|
||||
<!-- 3rd party dependencies -->
|
||||
<commons-lang3.version>3.14.0</commons-lang3.version>
|
||||
<dagger.version>2.50</dagger.version>
|
||||
<commons-lang3.version>3.16.0</commons-lang3.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.3.0-jre</guava.version>
|
||||
<jackson.version>2.17.2</jackson.version>
|
||||
<javafx.version>22.0.2</javafx.version>
|
||||
<jwt.version>4.4.0</jwt.version>
|
||||
<nimbus-jose.version>9.37.3</nimbus-jose.version>
|
||||
<logback.version>1.4.14</logback.version>
|
||||
<slf4j.version>2.0.11</slf4j.version>
|
||||
<logback.version>1.5.7</logback.version>
|
||||
<slf4j.version>2.0.16</slf4j.version>
|
||||
<tinyoauth2.version>0.8.0</tinyoauth2.version>
|
||||
<zxcvbn.version>1.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>
|
||||
<hamcrest.version>2.2</hamcrest.version>
|
||||
<junit.jupiter.version>5.11.0</junit.jupiter.version>
|
||||
<mockito.version>5.12.0</mockito.version>
|
||||
<hamcrest.version>3.0</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>10.0.3</dependency-check.version>
|
||||
<jacoco.version>0.8.12</jacoco.version>
|
||||
<license-generator.version>2.4.0</license-generator.version>
|
||||
<junit-tree-reporter.version>1.2.1</junit-tree-reporter.version>
|
||||
<mvn-compiler.version>3.12.1</mvn-compiler.version>
|
||||
<junit-tree-reporter.version>1.3.0</junit-tree-reporter.version>
|
||||
<mvn-compiler.version>3.13.0</mvn-compiler.version>
|
||||
<mvn-resources.version>3.3.1</mvn-resources.version>
|
||||
<mvn-dependency.version>3.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.1</mvn-dependency.version>
|
||||
<mvn-surefire.version>3.4.0</mvn-surefire.version>
|
||||
<mvn-jar.version>3.4.2</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>
|
||||
@@ -465,7 +471,7 @@
|
||||
<skipTestScope>true</skipTestScope>
|
||||
<detail>true</detail>
|
||||
<suppressionFile>suppression.xml</suppressionFile>
|
||||
<nvdApiKey>${env.NVD_API_KEY}</nvdApiKey>
|
||||
<nvdApiKeyEnvironmentVariable>NVD_API_KEY</nvdApiKeyEnvironmentVariable>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
|
||||
@@ -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,17 +31,18 @@ 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;
|
||||
requires dagger;
|
||||
requires java.compiler;
|
||||
requires io.github.coffeelibs.tinyoauth2client;
|
||||
requires org.slf4j;
|
||||
requires org.apache.commons.lang3;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ public class KeychainManager implements KeychainAccessProvider {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void storePassphrase(String key, String displayName, CharSequence passphrase) throws KeychainAccessException {
|
||||
public void storePassphrase(String key, String displayName, CharSequence passphrase, boolean ignored) throws KeychainAccessException {
|
||||
getKeychainOrFail().storePassphrase(key, displayName, passphrase);
|
||||
setPassphraseStored(key, true);
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ import org.cryptomator.integrations.mount.Mount;
|
||||
import org.cryptomator.integrations.mount.MountBuilder;
|
||||
import org.cryptomator.integrations.mount.MountFailedException;
|
||||
import org.cryptomator.integrations.mount.MountService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
@@ -28,6 +30,8 @@ import static org.cryptomator.integrations.mount.MountCapability.UNMOUNT_FORCED;
|
||||
@Singleton
|
||||
public class Mounter {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(Mounter.class);
|
||||
|
||||
// mount providers (key) can not be used if any of the conflicting mount providers (values) are already in use
|
||||
private static final Map<String, Set<String>> CONFLICTING_MOUNT_SERVICES = Map.of(
|
||||
"org.cryptomator.frontend.fuse.mount.MacFuseMountProvider", Set.of("org.cryptomator.frontend.fuse.mount.FuseTMountProvider"),
|
||||
@@ -127,9 +131,7 @@ public class Mounter {
|
||||
}
|
||||
} else if (canMountToParent && !canMountToDir) {
|
||||
MountWithinParentUtil.prepareParentNoMountPoint(userChosenMountPoint);
|
||||
cleanup = () -> {
|
||||
MountWithinParentUtil.cleanup(userChosenMountPoint);
|
||||
};
|
||||
cleanup = () -> MountWithinParentUtil.cleanup(userChosenMountPoint);
|
||||
}
|
||||
try {
|
||||
builder.setMountpoint(userChosenMountPoint);
|
||||
|
||||
@@ -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 {
|
||||
@@ -36,16 +37,21 @@ public class Settings {
|
||||
static final boolean DEFAULT_START_HIDDEN = false;
|
||||
static final boolean DEFAULT_AUTO_CLOSE_VAULTS = false;
|
||||
static final boolean DEFAULT_USE_KEYCHAIN = true;
|
||||
static final boolean DEFAULT_USE_QUICKACCESS = true;
|
||||
static final int DEFAULT_PORT = 42427;
|
||||
static final int DEFAULT_NUM_TRAY_NOTIFICATIONS = 3;
|
||||
static final boolean DEFAULT_DEBUG_MODE = false;
|
||||
static final UiTheme DEFAULT_THEME = UiTheme.LIGHT;
|
||||
@Deprecated // to be changed to "whatever is available" eventually
|
||||
static final String DEFAULT_KEYCHAIN_PROVIDER = SystemUtils.IS_OS_WINDOWS ? "org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess" : SystemUtils.IS_OS_MAC ? "org.cryptomator.macos.keychain.MacSystemKeychainAccess" : "org.cryptomator.linux.keychain.SecretServiceKeychainAccess";
|
||||
static final String DEFAULT_KEYCHAIN_PROVIDER = SystemUtils.IS_OS_WINDOWS ? "org.cryptomator.windows.keychain.WindowsProtectedKeychainAccess" : //
|
||||
SystemUtils.IS_OS_MAC ? "org.cryptomator.macos.keychain.MacSystemKeychainAccess" : //
|
||||
"org.cryptomator.linux.keychain.SecretServiceKeychainAccess";
|
||||
static final String DEFAULT_QUICKACCESS_SERVICE = SystemUtils.IS_OS_WINDOWS ? "org.cryptomator.windows.quickaccess.ExplorerQuickAccessService" : //
|
||||
SystemUtils.IS_OS_LINUX ? "org.cryptomator.linux.quickaccess.NautilusBookmarks" : null;
|
||||
|
||||
static final String DEFAULT_USER_INTERFACE_ORIENTATION = NodeOrientation.LEFT_TO_RIGHT.name();
|
||||
static final boolean DEFAULT_SHOW_MINIMIZE_BUTTON = false;
|
||||
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;
|
||||
@@ -57,6 +63,8 @@ public class Settings {
|
||||
public final BooleanProperty debugMode;
|
||||
public final ObjectProperty<UiTheme> theme;
|
||||
public final StringProperty keychainProvider;
|
||||
public final BooleanProperty useQuickAccess;
|
||||
public final StringProperty quickAccessService;
|
||||
public final ObjectProperty<NodeOrientation> userInterfaceOrientation;
|
||||
public final StringProperty licenseKey;
|
||||
public final BooleanProperty showMinimizeButton;
|
||||
@@ -67,7 +75,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;
|
||||
|
||||
@@ -89,6 +97,7 @@ public class Settings {
|
||||
this.startHidden = new SimpleBooleanProperty(this, "startHidden", json.startHidden);
|
||||
this.autoCloseVaults = new SimpleBooleanProperty(this, "autoCloseVaults", json.autoCloseVaults);
|
||||
this.useKeychain = new SimpleBooleanProperty(this, "useKeychain", json.useKeychain);
|
||||
this.useQuickAccess = new SimpleBooleanProperty(this, "addToQuickAccess", json.useQuickAccess);
|
||||
this.port = new SimpleIntegerProperty(this, "webDavPort", json.port);
|
||||
this.numTrayNotifications = new SimpleIntegerProperty(this, "numTrayNotifications", json.numTrayNotifications);
|
||||
this.debugMode = new SimpleBooleanProperty(this, "debugMode", json.debugMode);
|
||||
@@ -104,7 +113,8 @@ 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.quickAccessService = new SimpleStringProperty(this, "quickAccessService", json.quickAccessService);
|
||||
this.lastSuccessfulUpdateCheck = new SimpleObjectProperty<>(this, "lastSuccessfulUpdateCheck", json.lastSuccessfulUpdateCheck);
|
||||
|
||||
this.directories.addAll(json.directories.stream().map(VaultSettings::new).toList());
|
||||
|
||||
@@ -116,6 +126,7 @@ public class Settings {
|
||||
startHidden.addListener(this::somethingChanged);
|
||||
autoCloseVaults.addListener(this::somethingChanged);
|
||||
useKeychain.addListener(this::somethingChanged);
|
||||
useQuickAccess.addListener(this::somethingChanged);
|
||||
port.addListener(this::somethingChanged);
|
||||
numTrayNotifications.addListener(this::somethingChanged);
|
||||
debugMode.addListener(this::somethingChanged);
|
||||
@@ -131,7 +142,8 @@ public class Settings {
|
||||
windowHeight.addListener(this::somethingChanged);
|
||||
language.addListener(this::somethingChanged);
|
||||
mountService.addListener(this::somethingChanged);
|
||||
lastUpdateCheck.addListener(this::somethingChanged);
|
||||
quickAccessService.addListener(this::somethingChanged);
|
||||
lastSuccessfulUpdateCheck.addListener(this::somethingChanged);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@@ -170,6 +182,7 @@ public class Settings {
|
||||
json.startHidden = startHidden.get();
|
||||
json.autoCloseVaults = autoCloseVaults.get();
|
||||
json.useKeychain = useKeychain.get();
|
||||
json.useQuickAccess = useQuickAccess.get();
|
||||
json.port = port.get();
|
||||
json.numTrayNotifications = numTrayNotifications.get();
|
||||
json.debugMode = debugMode.get();
|
||||
@@ -185,7 +198,8 @@ public class Settings {
|
||||
json.windowHeight = windowHeight.get();
|
||||
json.language = language.get();
|
||||
json.mountService = mountService.get();
|
||||
json.lastUpdateCheck = lastUpdateCheck.get();
|
||||
json.quickAccessService = quickAccessService.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,13 @@ 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;
|
||||
|
||||
@JsonProperty("useQuickAccess")
|
||||
boolean useQuickAccess = Settings.DEFAULT_USE_QUICKACCESS;
|
||||
|
||||
@JsonProperty("quickAccessService")
|
||||
String quickAccessService = Settings.DEFAULT_QUICKACCESS_SERVICE;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -57,7 +58,10 @@ public class SettingsProvider implements Supplier<Settings> {
|
||||
}
|
||||
|
||||
private Settings load() {
|
||||
Settings settings = env.getSettingsPath().flatMap(this::tryLoad).findFirst().orElseGet(() -> Settings.create(env));
|
||||
Settings settings = env.getSettingsPath() //
|
||||
.flatMap(this::tryLoad) //
|
||||
.findFirst() //
|
||||
.orElseGet(() -> Settings.create(env));
|
||||
settings.setSaveCmd(this::scheduleSave);
|
||||
return settings;
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ package org.cryptomator.common.vaults;
|
||||
import org.apache.commons.lang3.SystemUtils;
|
||||
import org.cryptomator.common.Constants;
|
||||
import org.cryptomator.common.mount.Mounter;
|
||||
import org.cryptomator.common.settings.Settings;
|
||||
import org.cryptomator.common.settings.VaultSettings;
|
||||
import org.cryptomator.cryptofs.CryptoFileSystem;
|
||||
import org.cryptomator.cryptofs.CryptoFileSystemProperties;
|
||||
@@ -23,6 +24,9 @@ import org.cryptomator.cryptolib.api.MasterkeyLoadingFailedException;
|
||||
import org.cryptomator.integrations.mount.MountFailedException;
|
||||
import org.cryptomator.integrations.mount.Mountpoint;
|
||||
import org.cryptomator.integrations.mount.UnmountFailedException;
|
||||
import org.cryptomator.integrations.quickaccess.QuickAccessService;
|
||||
import org.cryptomator.integrations.quickaccess.QuickAccessServiceException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -54,6 +58,7 @@ public class Vault {
|
||||
|
||||
private final VaultSettings vaultSettings;
|
||||
private final AtomicReference<CryptoFileSystem> cryptoFileSystem;
|
||||
private final AtomicReference<QuickAccessService.QuickAccessEntry> quickAccessEntry;
|
||||
private final VaultState state;
|
||||
private final ObjectProperty<Exception> lastKnownException;
|
||||
private final VaultConfigCache configCache;
|
||||
@@ -67,6 +72,7 @@ public class Vault {
|
||||
private final BooleanBinding unknownError;
|
||||
private final ObjectBinding<Mountpoint> mountPoint;
|
||||
private final Mounter mounter;
|
||||
private final Settings settings;
|
||||
private final BooleanProperty showingStats;
|
||||
|
||||
private final AtomicReference<Mounter.MountHandle> mountHandle = new AtomicReference<>(null);
|
||||
@@ -78,7 +84,7 @@ public class Vault {
|
||||
VaultState state, //
|
||||
@Named("lastKnownException") ObjectProperty<Exception> lastKnownException, //
|
||||
VaultStats stats, //
|
||||
Mounter mounter) {
|
||||
Mounter mounter, Settings settings) {
|
||||
this.vaultSettings = vaultSettings;
|
||||
this.configCache = configCache;
|
||||
this.cryptoFileSystem = cryptoFileSystem;
|
||||
@@ -94,7 +100,9 @@ public class Vault {
|
||||
this.unknownError = Bindings.createBooleanBinding(this::isUnknownError, state);
|
||||
this.mountPoint = Bindings.createObjectBinding(this::getMountPoint, state);
|
||||
this.mounter = mounter;
|
||||
this.settings = settings;
|
||||
this.showingStats = new SimpleBooleanProperty(false);
|
||||
this.quickAccessEntry = new AtomicReference<>(null);
|
||||
}
|
||||
|
||||
// ******************************************************************************
|
||||
@@ -154,6 +162,9 @@ public class Vault {
|
||||
var rootPath = fs.getRootDirectories().iterator().next();
|
||||
var mountHandle = mounter.mount(vaultSettings, rootPath);
|
||||
success = this.mountHandle.compareAndSet(null, mountHandle);
|
||||
if (settings.useQuickAccess.getValue()) {
|
||||
addToQuickAccess();
|
||||
}
|
||||
} finally {
|
||||
if (!success) {
|
||||
destroyCryptoFileSystem();
|
||||
@@ -178,6 +189,7 @@ public class Vault {
|
||||
mountHandle.mountObj().close();
|
||||
mountHandle.specialCleanup().run();
|
||||
} finally {
|
||||
removeFromQuickAccess();
|
||||
destroyCryptoFileSystem();
|
||||
}
|
||||
|
||||
@@ -185,6 +197,52 @@ public class Vault {
|
||||
LOG.info("Locked vault '{}'", getDisplayName());
|
||||
}
|
||||
|
||||
private synchronized void addToQuickAccess() {
|
||||
if (quickAccessEntry.get() != null) {
|
||||
//we don't throw an exception since we don't wanna block unlocking
|
||||
LOG.warn("Vault already added to quick access area. Will be removed on next lock operation.");
|
||||
return;
|
||||
}
|
||||
|
||||
QuickAccessService.get() //
|
||||
.filter(s -> s.getClass().getName().equals(settings.quickAccessService.getValue())) //
|
||||
.findFirst() //
|
||||
.ifPresentOrElse( //
|
||||
this::addToQuickAccessInternal, //
|
||||
() -> LOG.warn("Unable to add Vault to quick access area: Desired implementation not available.") //
|
||||
);
|
||||
}
|
||||
|
||||
private void addToQuickAccessInternal(@NotNull QuickAccessService s) {
|
||||
if (getMountPoint() instanceof Mountpoint.WithPath mp) {
|
||||
try {
|
||||
var entry = s.add(mp.path(), getDisplayName());
|
||||
quickAccessEntry.set(entry);
|
||||
} catch (QuickAccessServiceException e) {
|
||||
LOG.error("Adding vault to quick access area failed", e);
|
||||
}
|
||||
} else {
|
||||
LOG.warn("Unable to add vault to quick access area: Vault is not mounted to local system path.");
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void removeFromQuickAccess() {
|
||||
if (quickAccessEntry.get() == null) {
|
||||
LOG.debug("Removing vault from quick access area: Entry not found, nothing to do.");
|
||||
return;
|
||||
}
|
||||
removeFromQuickAccessInternal();
|
||||
}
|
||||
|
||||
private void removeFromQuickAccessInternal() {
|
||||
try {
|
||||
quickAccessEntry.get().remove();
|
||||
quickAccessEntry.set(null);
|
||||
} catch (QuickAccessServiceException e) {
|
||||
LOG.error("Removing vault from quick access area failed", e);
|
||||
}
|
||||
}
|
||||
|
||||
// ******************************************************************************
|
||||
// Observable Properties
|
||||
// *******************************************************************************
|
||||
|
||||
@@ -8,11 +8,13 @@
|
||||
*******************************************************************************/
|
||||
package org.cryptomator.common.vaults;
|
||||
|
||||
import org.apache.commons.lang3.SystemUtils;
|
||||
import org.cryptomator.common.settings.Settings;
|
||||
import org.cryptomator.common.settings.VaultSettings;
|
||||
import org.cryptomator.cryptofs.CryptoFileSystemProvider;
|
||||
import org.cryptomator.cryptofs.DirStructure;
|
||||
import org.cryptomator.cryptofs.migration.Migrators;
|
||||
import org.cryptomator.integrations.mount.MountService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -24,6 +26,7 @@ import java.nio.file.Files;
|
||||
import java.nio.file.NoSuchFileException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
@@ -38,14 +41,21 @@ public class VaultListManager {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(VaultListManager.class);
|
||||
|
||||
private final AutoLocker autoLocker;
|
||||
private final List<MountService> mountServices;
|
||||
private final VaultComponent.Factory vaultComponentFactory;
|
||||
private final ObservableList<Vault> vaultList;
|
||||
private final String defaultVaultName;
|
||||
|
||||
@Inject
|
||||
public VaultListManager(ObservableList<Vault> vaultList, AutoLocker autoLocker, VaultComponent.Factory vaultComponentFactory, ResourceBundle resourceBundle, Settings settings) {
|
||||
public VaultListManager(ObservableList<Vault> vaultList, //
|
||||
AutoLocker autoLocker, //
|
||||
List<MountService> mountServices,
|
||||
VaultComponent.Factory vaultComponentFactory,
|
||||
ResourceBundle resourceBundle,
|
||||
Settings settings) {
|
||||
this.vaultList = vaultList;
|
||||
this.autoLocker = autoLocker;
|
||||
this.mountServices = mountServices;
|
||||
this.vaultComponentFactory = vaultComponentFactory;
|
||||
this.defaultVaultName = resourceBundle.getString("defaults.vault.vaultName");
|
||||
|
||||
@@ -76,6 +86,15 @@ public class VaultListManager {
|
||||
} else {
|
||||
vaultSettings.displayName.set(defaultVaultName);
|
||||
}
|
||||
|
||||
//due to https://github.com/cryptomator/cryptomator/issues/2880#issuecomment-1680313498
|
||||
var nameOfWinfspLocalMounter = "org.cryptomator.frontend.fuse.mount.WinFspMountProvider";
|
||||
if (SystemUtils.IS_OS_WINDOWS //
|
||||
&& vaultSettings.path.get().toString().contains("Dropbox") //
|
||||
&& mountServices.stream().anyMatch(s -> s.getClass().getName().equals(nameOfWinfspLocalMounter))) {
|
||||
vaultSettings.mountService.setValue(nameOfWinfspLocalMounter);
|
||||
}
|
||||
|
||||
return vaultSettings;
|
||||
}
|
||||
|
||||
|
||||
+61
-15
@@ -13,31 +13,37 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import javafx.application.Platform;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.binding.BooleanBinding;
|
||||
import javafx.beans.property.BooleanProperty;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
import javafx.beans.property.SimpleBooleanProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.RadioButton;
|
||||
import javafx.scene.control.Toggle;
|
||||
import javafx.scene.control.ToggleGroup;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.stage.DirectoryChooser;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.stage.WindowEvent;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
@AddVaultWizardScoped
|
||||
public class CreateNewVaultLocationController implements FxController {
|
||||
@@ -49,19 +55,23 @@ public class CreateNewVaultLocationController implements FxController {
|
||||
private final Stage window;
|
||||
private final Lazy<Scene> chooseNameScene;
|
||||
private final Lazy<Scene> chooseExpertSettingsScene;
|
||||
private final List<RadioButton> locationPresetBtns;
|
||||
private final ObjectProperty<Path> vaultPath;
|
||||
private final StringProperty vaultName;
|
||||
private final ExecutorService backgroundExecutor;
|
||||
private final ResourceBundle resourceBundle;
|
||||
private final ObservableValue<VaultPathStatus> vaultPathStatus;
|
||||
private final ObservableValue<Boolean> validVaultPath;
|
||||
private final BooleanProperty usePresetPath;
|
||||
private final BooleanProperty loadingPresetLocations = new SimpleBooleanProperty(false);
|
||||
private final ObservableList<Node> radioButtons;
|
||||
private final ObservableList<Node> sortedRadioButtons;
|
||||
|
||||
private Path customVaultPath = DEFAULT_CUSTOM_VAULT_PATH;
|
||||
|
||||
//FXML
|
||||
public ToggleGroup locationPresetsToggler;
|
||||
public VBox radioButtonVBox;
|
||||
public HBox customLocationRadioBtn;
|
||||
public RadioButton customRadioButton;
|
||||
public Label locationStatusLabel;
|
||||
public FontAwesome5IconView goodLocation;
|
||||
@@ -73,25 +83,20 @@ public class CreateNewVaultLocationController implements FxController {
|
||||
@FxmlScene(FxmlFile.ADDVAULT_NEW_EXPERT_SETTINGS) Lazy<Scene> chooseExpertSettingsScene, //
|
||||
ObjectProperty<Path> vaultPath, //
|
||||
@Named("vaultName") StringProperty vaultName, //
|
||||
ResourceBundle resourceBundle) {
|
||||
ExecutorService backgroundExecutor, ResourceBundle resourceBundle) {
|
||||
this.window = window;
|
||||
this.chooseNameScene = chooseNameScene;
|
||||
this.chooseExpertSettingsScene = chooseExpertSettingsScene;
|
||||
this.vaultPath = vaultPath;
|
||||
this.vaultName = vaultName;
|
||||
this.backgroundExecutor = backgroundExecutor;
|
||||
this.resourceBundle = resourceBundle;
|
||||
this.vaultPathStatus = ObservableUtil.mapWithDefault(vaultPath, this::validatePath, new VaultPathStatus(false, "error.message"));
|
||||
this.validVaultPath = ObservableUtil.mapWithDefault(vaultPathStatus, VaultPathStatus::valid, false);
|
||||
this.vaultPathStatus.addListener(this::updateStatusLabel);
|
||||
this.usePresetPath = new SimpleBooleanProperty();
|
||||
this.locationPresetBtns = LocationPresetsProvider.loadAll(LocationPresetsProvider.class) //
|
||||
.flatMap(LocationPresetsProvider::getLocations) //
|
||||
.sorted(Comparator.comparing(LocationPreset::name)) //
|
||||
.map(preset -> { //
|
||||
var btn = new RadioButton(preset.name());
|
||||
btn.setUserData(preset.path());
|
||||
return btn;
|
||||
}).toList();
|
||||
this.radioButtons = FXCollections.observableArrayList();
|
||||
this.sortedRadioButtons = radioButtons.sorted(this::compareLocationPresets);
|
||||
}
|
||||
|
||||
private VaultPathStatus validatePath(Path p) throws NullPointerException {
|
||||
@@ -137,12 +142,45 @@ public class CreateNewVaultLocationController implements FxController {
|
||||
|
||||
@FXML
|
||||
public void initialize() {
|
||||
radioButtonVBox.getChildren().addAll(1, locationPresetBtns); //first item is the list header
|
||||
locationPresetsToggler.getToggles().addAll(locationPresetBtns);
|
||||
var task = backgroundExecutor.submit(this::loadLocationPresets);
|
||||
window.addEventHandler(WindowEvent.WINDOW_HIDING, _ -> task.cancel(true));
|
||||
locationPresetsToggler.selectedToggleProperty().addListener(this::togglePredefinedLocation);
|
||||
usePresetPath.bind(locationPresetsToggler.selectedToggleProperty().isNotEqualTo(customRadioButton));
|
||||
radioButtons.add(customLocationRadioBtn);
|
||||
Bindings.bindContent(radioButtonVBox.getChildren(), sortedRadioButtons); //to prevent garbage collection of the binding, we bind explicitly to the sorted list
|
||||
}
|
||||
|
||||
private void loadLocationPresets() {
|
||||
Platform.runLater(() -> loadingPresetLocations.set(true));
|
||||
try {
|
||||
LocationPresetsProvider.loadAll(LocationPresetsProvider.class) //
|
||||
.flatMap(LocationPresetsProvider::getLocations) //we do not use sorted(), because it evaluates the stream elements, blocking until all elements are gathered
|
||||
.forEach(this::createRadioButtonFor);
|
||||
} finally {
|
||||
Platform.runLater(() -> loadingPresetLocations.set(false));
|
||||
}
|
||||
}
|
||||
|
||||
private void createRadioButtonFor(LocationPreset preset) {
|
||||
Platform.runLater(() -> {
|
||||
var btn = new RadioButton(preset.name());
|
||||
btn.setUserData(preset.path());
|
||||
radioButtons.add(btn);
|
||||
locationPresetsToggler.getToggles().add(btn);
|
||||
});
|
||||
}
|
||||
|
||||
private int compareLocationPresets(Node left, Node right) {
|
||||
if (customLocationRadioBtn.getId().equals(left.getId())) {
|
||||
return 1;
|
||||
} else if (customLocationRadioBtn.getId().equals(right.getId())) {
|
||||
return -1;
|
||||
} else {
|
||||
return ((RadioButton) left).getText().compareToIgnoreCase(((RadioButton) right).getText());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void togglePredefinedLocation(@SuppressWarnings("unused") ObservableValue<? extends Toggle> observable, @SuppressWarnings("unused") Toggle oldValue, Toggle newValue) {
|
||||
var storagePath = Optional.ofNullable((Path) newValue.getUserData()).orElse(customVaultPath);
|
||||
vaultPath.set(storagePath.resolve(vaultName.get()));
|
||||
@@ -197,7 +235,15 @@ public class CreateNewVaultLocationController implements FxController {
|
||||
}
|
||||
|
||||
public boolean isValidVaultPath() {
|
||||
return validVaultPath.getValue();
|
||||
return Boolean.TRUE.equals(validVaultPath.getValue());
|
||||
}
|
||||
|
||||
public boolean isLoadingPresetLocations() {
|
||||
return loadingPresetLocations.getValue();
|
||||
}
|
||||
|
||||
public BooleanProperty loadingPresetLocationsProperty() {
|
||||
return loadingPresetLocations;
|
||||
}
|
||||
|
||||
public BooleanProperty usePresetPathProperty() {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -75,6 +75,7 @@ public class ErrorController implements FxController {
|
||||
private final BooleanExpression errorSolutionFound = matchingErrorDiscussion.isNotNull();
|
||||
private final BooleanProperty isLoadingHttpResponse = new SimpleBooleanProperty();
|
||||
private final BooleanProperty askedForLookupDatabasePermission = new SimpleBooleanProperty();
|
||||
private final boolean formerSceneWasResizable;
|
||||
|
||||
@Inject
|
||||
ErrorController(Application application, @Named("stackTrace") String stackTrace, ErrorCode errorCode, @Nullable Scene previousScene, Stage window, Environment environment, ExecutorService executorService) {
|
||||
@@ -85,12 +86,14 @@ public class ErrorController implements FxController {
|
||||
this.window = window;
|
||||
this.environment = environment;
|
||||
this.executorService = executorService;
|
||||
this.formerSceneWasResizable = window.isResizable();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void back() {
|
||||
if (previousScene != null) {
|
||||
window.setScene(previousScene);
|
||||
window.setResizable(formerSceneWasResizable);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -4,7 +4,9 @@ import org.cryptomator.common.Environment;
|
||||
import org.cryptomator.common.settings.Settings;
|
||||
import org.cryptomator.integrations.autostart.AutoStartProvider;
|
||||
import org.cryptomator.integrations.autostart.ToggleAutoStartFailedException;
|
||||
import org.cryptomator.integrations.common.NamedServiceProvider;
|
||||
import org.cryptomator.integrations.keychain.KeychainAccessProvider;
|
||||
import org.cryptomator.integrations.quickaccess.QuickAccessService;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.ui.fxapp.FxApplicationWindows;
|
||||
import org.slf4j.Logger;
|
||||
@@ -30,12 +32,15 @@ public class GeneralPreferencesController implements FxController {
|
||||
private final Stage window;
|
||||
private final Settings settings;
|
||||
private final Optional<AutoStartProvider> autoStartProvider;
|
||||
private final List<QuickAccessService> quickAccessServices;
|
||||
private final Application application;
|
||||
private final Environment environment;
|
||||
private final List<KeychainAccessProvider> keychainAccessProviders;
|
||||
private final FxApplicationWindows appWindows;
|
||||
public CheckBox useKeychainCheckbox;
|
||||
public ChoiceBox<KeychainAccessProvider> keychainBackendChoiceBox;
|
||||
public CheckBox useQuickAccessCheckbox;
|
||||
public ChoiceBox<QuickAccessService> quickAccessServiceChoiceBox;
|
||||
public CheckBox startHiddenCheckbox;
|
||||
public CheckBox autoCloseVaultsCheckbox;
|
||||
public CheckBox debugModeCheckbox;
|
||||
@@ -48,6 +53,7 @@ public class GeneralPreferencesController implements FxController {
|
||||
this.settings = settings;
|
||||
this.autoStartProvider = autoStartProvider;
|
||||
this.keychainAccessProviders = keychainAccessProviders;
|
||||
this.quickAccessServices = QuickAccessService.get().toList();
|
||||
this.application = application;
|
||||
this.environment = environment;
|
||||
this.appWindows = appWindows;
|
||||
@@ -60,13 +66,21 @@ public class GeneralPreferencesController implements FxController {
|
||||
debugModeCheckbox.selectedProperty().bindBidirectional(settings.debugMode);
|
||||
autoStartProvider.ifPresent(autoStart -> autoStartCheckbox.setSelected(autoStart.isEnabled()));
|
||||
|
||||
var keychainSettingsConverter = new KeychainProviderClassNameConverter(keychainAccessProviders);
|
||||
var keychainSettingsConverter = new ServiceToSettingsConverter<>(keychainAccessProviders);
|
||||
keychainBackendChoiceBox.getItems().addAll(keychainAccessProviders);
|
||||
keychainBackendChoiceBox.setValue(keychainSettingsConverter.fromString(settings.keychainProvider.get()));
|
||||
keychainBackendChoiceBox.setConverter(new KeychainProviderDisplayNameConverter());
|
||||
Bindings.bindBidirectional(settings.keychainProvider, keychainBackendChoiceBox.valueProperty(), keychainSettingsConverter);
|
||||
useKeychainCheckbox.selectedProperty().bindBidirectional(settings.useKeychain);
|
||||
keychainBackendChoiceBox.disableProperty().bind(useKeychainCheckbox.selectedProperty().not());
|
||||
|
||||
useQuickAccessCheckbox.selectedProperty().bindBidirectional(settings.useQuickAccess);
|
||||
var quickAccessSettingsConverter = new ServiceToSettingsConverter<>(quickAccessServices);
|
||||
quickAccessServiceChoiceBox.getItems().addAll(quickAccessServices);
|
||||
quickAccessServiceChoiceBox.setValue(quickAccessSettingsConverter.fromString(settings.quickAccessService.get()));
|
||||
quickAccessServiceChoiceBox.setConverter(new NamedServiceConverter<>());
|
||||
Bindings.bindBidirectional(settings.quickAccessService, quickAccessServiceChoiceBox.valueProperty(), quickAccessSettingsConverter);
|
||||
quickAccessServiceChoiceBox.disableProperty().bind(useQuickAccessCheckbox.selectedProperty().not());
|
||||
}
|
||||
|
||||
public boolean isAutoStartSupported() {
|
||||
@@ -91,6 +105,10 @@ public class GeneralPreferencesController implements FxController {
|
||||
});
|
||||
}
|
||||
|
||||
public boolean isSomeQuickAccessServiceAvailable() {
|
||||
return !quickAccessServices.isEmpty();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void showLogfileDirectory() {
|
||||
environment.getLogDir().ifPresent(logDirPath -> application.getHostServices().showDocument(logDirPath.toUri().toString()));
|
||||
@@ -116,29 +134,47 @@ public class GeneralPreferencesController implements FxController {
|
||||
|
||||
}
|
||||
|
||||
private static class KeychainProviderClassNameConverter extends StringConverter<KeychainAccessProvider> {
|
||||
|
||||
private final List<KeychainAccessProvider> keychainAccessProviders;
|
||||
|
||||
public KeychainProviderClassNameConverter(List<KeychainAccessProvider> keychainAccessProviders) {
|
||||
this.keychainAccessProviders = keychainAccessProviders;
|
||||
}
|
||||
private static class NamedServiceConverter<T extends NamedServiceProvider> extends StringConverter<T> {
|
||||
|
||||
@Override
|
||||
public String toString(KeychainAccessProvider provider) {
|
||||
if (provider == null) {
|
||||
public String toString(T namedService) {
|
||||
if (namedService == null) {
|
||||
return null;
|
||||
} else {
|
||||
return provider.getClass().getName();
|
||||
return namedService.getName();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public KeychainAccessProvider fromString(String string) {
|
||||
public T fromString(String string) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class ServiceToSettingsConverter<T> extends StringConverter<T> {
|
||||
|
||||
private final List<T> services;
|
||||
|
||||
public ServiceToSettingsConverter(List<T> services) {
|
||||
this.services = services;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(T service) {
|
||||
if (service == null) {
|
||||
return null;
|
||||
} else {
|
||||
return service.getClass().getName();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public T fromString(String string) {
|
||||
if (string == null) {
|
||||
return null;
|
||||
} else {
|
||||
return keychainAccessProviders.stream().filter(provider -> provider.getClass().getName().equals(string)).findAny().orElse(null);
|
||||
return services.stream().filter(provider -> provider.getClass().getName().equals(string)).findAny().orElse(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,8 @@ public interface PreferencesComponent {
|
||||
selectedTabProperty().set(selectedTab);
|
||||
Stage stage = window();
|
||||
stage.setScene(scene().get());
|
||||
stage.setMinWidth(420);
|
||||
stage.setMinHeight(300);
|
||||
stage.show();
|
||||
stage.requestFocus();
|
||||
return stage;
|
||||
|
||||
@@ -37,7 +37,7 @@ public class PreferencesController implements FxController {
|
||||
this.env = env;
|
||||
this.window = window;
|
||||
this.selectedTabProperty = selectedTabProperty;
|
||||
this.updateAvailable = updateChecker.latestVersionProperty().isNotNull();
|
||||
this.updateAvailable = updateChecker.updateAvailableProperty();
|
||||
}
|
||||
|
||||
@FXML
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ public class TrayMenuModule {
|
||||
|
||||
@Provides
|
||||
@TrayMenuScoped
|
||||
static Optional<TrayMenuController> provideSupportedKeychainAccessProviders() {
|
||||
static Optional<TrayMenuController> provideFirstSupportedTrayMenuController() {
|
||||
return TrayMenuController.get();
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.cryptomator.ui.common.FxmlFile;
|
||||
import org.cryptomator.ui.common.FxmlScene;
|
||||
import org.cryptomator.ui.common.VaultService;
|
||||
import org.cryptomator.ui.fxapp.FxApplicationWindows;
|
||||
import org.cryptomator.ui.fxapp.PrimaryStage;
|
||||
import org.cryptomator.ui.keyloading.KeyLoadingStrategy;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -19,7 +20,9 @@ import javax.inject.Inject;
|
||||
import javafx.application.Platform;
|
||||
import javafx.beans.property.ObjectProperty;
|
||||
import javafx.concurrent.Task;
|
||||
import javafx.geometry.Rectangle2D;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Screen;
|
||||
import javafx.stage.Stage;
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -33,6 +36,7 @@ public class UnlockWorkflow extends Task<Void> {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(UnlockWorkflow.class);
|
||||
|
||||
private final Stage mainWindow;
|
||||
private final Stage window;
|
||||
private final Vault vault;
|
||||
private final VaultService vaultService;
|
||||
@@ -44,7 +48,8 @@ public class UnlockWorkflow extends Task<Void> {
|
||||
private final ObjectProperty<IllegalMountPointException> illegalMountPointException;
|
||||
|
||||
@Inject
|
||||
UnlockWorkflow(@UnlockWindow Stage window, //
|
||||
UnlockWorkflow(@PrimaryStage Stage mainWindow, //
|
||||
@UnlockWindow Stage window, //
|
||||
@UnlockWindow Vault vault, //
|
||||
VaultService vaultService, //
|
||||
@FxmlScene(FxmlFile.UNLOCK_SUCCESS) Lazy<Scene> successScene, //
|
||||
@@ -53,6 +58,7 @@ public class UnlockWorkflow extends Task<Void> {
|
||||
FxApplicationWindows appWindows, //
|
||||
@UnlockWindow KeyLoadingStrategy keyLoadingStrategy, //
|
||||
@UnlockWindow ObjectProperty<IllegalMountPointException> illegalMountPointException) {
|
||||
this.mainWindow = mainWindow;
|
||||
this.window = window;
|
||||
this.vault = vault;
|
||||
this.vaultService = vaultService;
|
||||
@@ -107,6 +113,19 @@ public class UnlockWorkflow extends Task<Void> {
|
||||
case ASK -> Platform.runLater(() -> {
|
||||
window.setScene(successScene.get());
|
||||
window.show();
|
||||
double x = mainWindow.getX() + (mainWindow.getWidth() - window.getWidth()) / 2;
|
||||
double y = mainWindow.getY() + (mainWindow.getHeight() - window.getHeight()) / 2;
|
||||
if(!mainWindow.isShowing()) {
|
||||
Screen screen = Screen.getScreensForRectangle(mainWindow.getX(), mainWindow.getY(), mainWindow.getWidth(), mainWindow.getHeight())
|
||||
.stream()
|
||||
.findFirst()
|
||||
.orElse(Screen.getPrimary());
|
||||
Rectangle2D bounds = screen.getVisualBounds();
|
||||
x = bounds.getMinX() + (bounds.getWidth() - window.getWidth()) / 2;
|
||||
y = bounds.getMinY() + (bounds.getHeight() - window.getHeight()) / 2;
|
||||
}
|
||||
window.setX(x);
|
||||
window.setY(y);
|
||||
});
|
||||
case REVEAL -> {
|
||||
Platform.runLater(window::close);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
|
||||
<?import org.cryptomator.ui.controls.FontAwesome5Spinner?>
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.ButtonBar?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.control.RadioButton?>
|
||||
<?import javafx.scene.control.ScrollPane?>
|
||||
<?import javafx.scene.control.TextField?>
|
||||
<?import javafx.scene.control.ToggleGroup?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
@@ -29,18 +31,26 @@
|
||||
<children>
|
||||
<Region VBox.vgrow="ALWAYS"/>
|
||||
|
||||
<VBox fx:id="radioButtonVBox" spacing="6">
|
||||
<Label wrapText="true" text="%addvaultwizard.new.locationInstruction"/>
|
||||
<!-- PLACEHOLDER, more radio buttons are added programmatically via controller -->
|
||||
<HBox spacing="12" alignment="CENTER_LEFT">
|
||||
<RadioButton fx:id="customRadioButton" toggleGroup="${locationPresetsToggler}" text="%addvaultwizard.new.directoryPickerLabel"/>
|
||||
<Button contentDisplay="LEFT" text="%addvaultwizard.new.directoryPickerButton" onAction="#chooseCustomVaultPath" disable="${controller.usePresetPath}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="FOLDER_OPEN"/>
|
||||
</graphic>
|
||||
</Button>
|
||||
</HBox>
|
||||
</VBox>
|
||||
<Label wrapText="true" text="%addvaultwizard.new.locationInstruction"/>
|
||||
<ScrollPane hbarPolicy="NEVER">
|
||||
<VBox fx:id="radioButtonVBox" spacing="6">
|
||||
<!-- PLACEHOLDER, more radio buttons are added programmatically via controller -->
|
||||
<HBox fx:id="customLocationRadioBtn" spacing="12" alignment="CENTER_LEFT">
|
||||
<RadioButton fx:id="customRadioButton" toggleGroup="${locationPresetsToggler}" text="%addvaultwizard.new.directoryPickerLabel"/>
|
||||
<Button contentDisplay="LEFT" text="%addvaultwizard.new.directoryPickerButton" onAction="#chooseCustomVaultPath" disable="${controller.usePresetPath}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="FOLDER_OPEN"/>
|
||||
</graphic>
|
||||
</Button>
|
||||
</HBox>
|
||||
</VBox>
|
||||
</ScrollPane>
|
||||
<Region prefHeight="2"/>
|
||||
<Label wrapText="true" text="%addvaultwizard.new.locationLoading" visible="${controller.loadingPresetLocations}" managed="${controller.loadingPresetLocations}" graphicTextGap="8">
|
||||
<graphic>
|
||||
<FontAwesome5Spinner/>
|
||||
</graphic>
|
||||
</Label>
|
||||
|
||||
<Region prefHeight="12" VBox.vgrow="NEVER"/>
|
||||
|
||||
|
||||
@@ -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>
|
||||
@@ -9,86 +9,97 @@
|
||||
<?import javafx.scene.control.Hyperlink?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.control.TextArea?>
|
||||
<?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?>
|
||||
<VBox xmlns:fx="http://javafx.com/fxml"
|
||||
<HBox xmlns:fx="http://javafx.com/fxml"
|
||||
xmlns="http://javafx.com/javafx"
|
||||
fx:controller="org.cryptomator.ui.error.ErrorController"
|
||||
minWidth="450"
|
||||
minHeight="450"
|
||||
prefWidth="450"
|
||||
prefHeight="450"
|
||||
spacing="18"
|
||||
alignment="TOP_CENTER">
|
||||
spacing="12">
|
||||
<padding>
|
||||
<Insets topRightBottomLeft="24"/>
|
||||
</padding>
|
||||
<children>
|
||||
<HBox spacing="12" VBox.vgrow="NEVER">
|
||||
<StackPane alignment="CENTER" HBox.hgrow="NEVER">
|
||||
<Circle styleClass="glyph-icon-primary" radius="24"/>
|
||||
<FontAwesome5IconView styleClass="glyph-icon-white" glyph="EXCLAMATION" glyphSize="24"/>
|
||||
</StackPane>
|
||||
<VBox spacing="6" HBox.hgrow="ALWAYS">
|
||||
<FormattedLabel styleClass="label-extra-large" format="%error.message" arg1="${controller.errorCode}"/>
|
||||
<VBox visible="${!controller.askedForLookupDatabasePermission}" managed="${!controller.askedForLookupDatabasePermission}">
|
||||
<Label text="%error.lookupPermissionMessage" wrapText="true"/>
|
||||
<Region VBox.vgrow="ALWAYS" minHeight="18"/>
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="+NY">
|
||||
<buttons>
|
||||
<Button text="%error.dismiss" ButtonBar.buttonData="NO" onAction="#dismiss"/>
|
||||
<Button text="%error.lookUpSolution" ButtonBar.buttonData="YES" defaultButton="true" onAction="#lookUpSolution"/>
|
||||
</buttons>
|
||||
</ButtonBar>
|
||||
</VBox>
|
||||
<VBox visible="${controller.askedForLookupDatabasePermission}" managed="${controller.askedForLookupDatabasePermission}">
|
||||
<FontAwesome5Spinner glyphSize="24" visible="${controller.isLoadingHttpResponse}" managed="${controller.isLoadingHttpResponse}"/>
|
||||
<VBox visible="${!controller.isLoadingHttpResponse}" managed="${!controller.isLoadingHttpResponse}">
|
||||
<Label text="%error.existingSolutionDescription" wrapText="true" visible="${controller.errorSolutionFound}" managed="${controller.errorSolutionFound}"/>
|
||||
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.solution" onAction="#showSolution" contentDisplay="LEFT" visible="${controller.errorSolutionFound}" managed="${controller.errorSolutionFound}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
|
||||
</graphic>
|
||||
</Hyperlink>
|
||||
<Label text="%error.description" wrapText="true" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}"/>
|
||||
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.lookup" onAction="#searchError" contentDisplay="LEFT" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
|
||||
</graphic>
|
||||
</Hyperlink>
|
||||
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.report" onAction="#reportError" contentDisplay="LEFT" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
|
||||
</graphic>
|
||||
</Hyperlink>
|
||||
</VBox>
|
||||
</VBox>
|
||||
</VBox>
|
||||
</HBox>
|
||||
<VBox spacing="6" VBox.vgrow="ALWAYS">
|
||||
<HBox>
|
||||
<Label text="%error.technicalDetails"/>
|
||||
<Region HBox.hgrow="ALWAYS"/>
|
||||
<Hyperlink styleClass="hyperlink-underline" text="%generic.button.copy" onAction="#copyDetails" contentDisplay="LEFT" visible="${!controller.copiedDetails}" managed="${!controller.copiedDetails}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="CLIPBOARD" glyphSize="12"/>
|
||||
</graphic>
|
||||
</Hyperlink>
|
||||
<Hyperlink styleClass="hyperlink-underline" text="%generic.button.copied" onAction="#copyDetails" contentDisplay="LEFT" visible="${controller.copiedDetails}" managed="${controller.copiedDetails}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="CHECK" glyphSize="12"/>
|
||||
</graphic>
|
||||
</Hyperlink>
|
||||
</HBox>
|
||||
<TextArea VBox.vgrow="ALWAYS" text="${controller.detailText}" prefRowCount="5" editable="false"/>
|
||||
</VBox>
|
||||
<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">
|
||||
<FormattedLabel styleClass="label-extra-large" format="%error.message" arg1="${controller.errorCode}">
|
||||
<padding>
|
||||
<Insets bottom="6" top="6"/>
|
||||
</padding>
|
||||
</FormattedLabel>
|
||||
|
||||
<VBox visible="${!controller.askedForLookupDatabasePermission}" managed="${!controller.askedForLookupDatabasePermission}">
|
||||
<Label text="%error.lookupPermissionMessage" wrapText="true"/>
|
||||
<Region minHeight="12"/>
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="+NY">
|
||||
<buttons>
|
||||
<Button text="%error.dismiss" ButtonBar.buttonData="NO" onAction="#dismiss"/>
|
||||
<Button text="%error.lookUpSolution" ButtonBar.buttonData="YES" defaultButton="true" onAction="#lookUpSolution"/>
|
||||
</buttons>
|
||||
</ButtonBar>
|
||||
</VBox>
|
||||
<VBox visible="${controller.askedForLookupDatabasePermission}" managed="${controller.askedForLookupDatabasePermission}">
|
||||
<FontAwesome5Spinner glyphSize="24" visible="${controller.isLoadingHttpResponse}" managed="${controller.isLoadingHttpResponse}"/>
|
||||
<VBox visible="${!controller.isLoadingHttpResponse}" managed="${!controller.isLoadingHttpResponse}">
|
||||
<Label text="%error.existingSolutionDescription" wrapText="true" visible="${controller.errorSolutionFound}" managed="${controller.errorSolutionFound}"/>
|
||||
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.solution" onAction="#showSolution" contentDisplay="LEFT" visible="${controller.errorSolutionFound}" managed="${controller.errorSolutionFound}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
|
||||
</graphic>
|
||||
</Hyperlink>
|
||||
<Label text="%error.description" wrapText="true" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}"/>
|
||||
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.lookup" onAction="#searchError" contentDisplay="LEFT" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
|
||||
</graphic>
|
||||
</Hyperlink>
|
||||
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.report" onAction="#reportError" contentDisplay="LEFT" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
|
||||
</graphic>
|
||||
</Hyperlink>
|
||||
</VBox>
|
||||
</VBox>
|
||||
<Region minHeight="12"/>
|
||||
<HBox>
|
||||
<padding>
|
||||
<Insets top="6" bottom="6"/>
|
||||
</padding>
|
||||
<Label text="%error.technicalDetails"/>
|
||||
<Region HBox.hgrow="ALWAYS"/>
|
||||
<Hyperlink styleClass="hyperlink-underline" text="%generic.button.copy" onAction="#copyDetails" contentDisplay="LEFT" visible="${!controller.copiedDetails}" managed="${!controller.copiedDetails}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="CLIPBOARD" glyphSize="12"/>
|
||||
</graphic>
|
||||
</Hyperlink>
|
||||
<Hyperlink styleClass="hyperlink-underline" text="%generic.button.copied" onAction="#copyDetails" contentDisplay="LEFT" visible="${controller.copiedDetails}" managed="${controller.copiedDetails}">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="CHECK" glyphSize="12"/>
|
||||
</graphic>
|
||||
</Hyperlink>
|
||||
</HBox>
|
||||
<TextArea VBox.vgrow="ALWAYS" text="${controller.detailText}" prefRowCount="5" editable="false"/>
|
||||
|
||||
<Region minHeight="18"/>
|
||||
<ButtonBar buttonMinWidth="120" buttonOrder="B+C">
|
||||
<buttons>
|
||||
<Button text="%generic.button.back" ButtonBar.buttonData="BACK_PREVIOUS" onAction="#back" visible="${controller.previousScenePresent}"/>
|
||||
<Button text="%generic.button.cancel" ButtonBar.buttonData="CANCEL_CLOSE" onAction="#close"/>
|
||||
</buttons>
|
||||
</ButtonBar>
|
||||
</children>
|
||||
</VBox>
|
||||
</VBox>
|
||||
</HBox>
|
||||
|
||||
@@ -7,8 +7,6 @@
|
||||
xmlns="http://javafx.com/javafx"
|
||||
fx:id="tabPane"
|
||||
fx:controller="org.cryptomator.ui.preferences.PreferencesController"
|
||||
minWidth="-Infinity"
|
||||
maxWidth="-Infinity"
|
||||
prefWidth="650"
|
||||
tabMinWidth="60"
|
||||
tabClosingPolicy="UNAVAILABLE"
|
||||
|
||||
@@ -30,6 +30,10 @@
|
||||
<ChoiceBox fx:id="keychainBackendChoiceBox"/>
|
||||
</HBox>
|
||||
|
||||
<HBox spacing="12" alignment="CENTER_LEFT" visible="${controller.someQuickAccessServiceAvailable}" managed="${controller.someQuickAccessServiceAvailable}">
|
||||
<CheckBox fx:id="useQuickAccessCheckbox" text="%preferences.general.quickAccessService"/>
|
||||
<ChoiceBox fx:id="quickAccessServiceChoiceBox"/>
|
||||
</HBox>
|
||||
<Region VBox.vgrow="ALWAYS"/>
|
||||
|
||||
<HBox spacing="12" alignment="CENTER_LEFT">
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -288,6 +288,7 @@ preferences.general.debugLogging=Enable debug logging
|
||||
preferences.general.debugDirectory=Reveal log files
|
||||
preferences.general.autoStart=Launch Cryptomator on system start
|
||||
preferences.general.keychainBackend=Store passwords with
|
||||
preferences.general.quickAccessService=Add unlocked vaults to the quick access area
|
||||
## Interface
|
||||
preferences.interface=Interface
|
||||
preferences.interface.theme=Look & Feel
|
||||
@@ -321,6 +322,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 +542,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?
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
|
||||
# Error
|
||||
|
||||
# Defaults
|
||||
|
||||
# Tray Menu
|
||||
|
||||
# Add Vault Wizard
|
||||
## New
|
||||
### Name
|
||||
### Location
|
||||
### Expert Settings
|
||||
### Password
|
||||
### Information
|
||||
## Existing
|
||||
## Success
|
||||
|
||||
# Remove Vault
|
||||
|
||||
# Change Password
|
||||
|
||||
# Forget Password
|
||||
|
||||
# Unlock
|
||||
## Select
|
||||
## Success
|
||||
## Failure
|
||||
## Hub
|
||||
### Waiting
|
||||
### Receive Key
|
||||
### Register Device
|
||||
### Register Device Legacy
|
||||
### Registration Success
|
||||
### Registration Failed
|
||||
### Unauthorized
|
||||
### Requires Account Initialization
|
||||
### License Exceeded
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
## Failure
|
||||
|
||||
# Migration
|
||||
## Start
|
||||
## Run
|
||||
## Success
|
||||
## Missing file system capabilities
|
||||
## Impossible
|
||||
|
||||
# Health Check
|
||||
## Start
|
||||
## Start Failure
|
||||
## Check Selection
|
||||
## Detail view
|
||||
## Result view
|
||||
## Fix Application
|
||||
|
||||
# Preferences
|
||||
## General
|
||||
## Interface
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
## Contribution
|
||||
|
||||
### Remove License Key Dialog
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
|
||||
# Vault Statistics
|
||||
## Read
|
||||
## Write
|
||||
|
||||
## Accesses
|
||||
|
||||
|
||||
# Main Window
|
||||
## Vault List
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
### Locked
|
||||
### Unlocked
|
||||
### Missing
|
||||
### Needs Migration
|
||||
### Error
|
||||
|
||||
# Wrong File Alert
|
||||
|
||||
# Vault Options
|
||||
## General
|
||||
|
||||
## Mount
|
||||
## Master Key
|
||||
## Hub
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
### Reset Password
|
||||
### Recovery Key Password Reset Success
|
||||
|
||||
# Convert Vault
|
||||
|
||||
# New Password
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
@@ -16,7 +16,7 @@ generic.button.print=طباعة
|
||||
|
||||
# Error
|
||||
error.message=حدث خطأ ما
|
||||
error.description=لم يتوقع "كريبتوماتور" حدوث ذلك. يمكنك البحث عن الحلول الموجودة لهذا الخطأ. وإذا لم يتم الإبلاغ عنه بعد، لا تتردد في فعل ذلك.
|
||||
error.description=لم يتوقع Cryptomator حدوث ذلك. يمكنك البحث عن الحلول الموجودة لهذا الخطأ. وإذا لم يتم الإبلاغ عنه بعد، لا تتردد في فعل ذلك.
|
||||
error.hyperlink.lookup=ابحث عن هذا الخطأ
|
||||
error.hyperlink.report=أبلغ عن هذا الخطأ
|
||||
error.technicalDetails=التفاصيل:
|
||||
@@ -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,19 +157,31 @@ hub.auth.loginLink=لم يتم إعادة توجيهك؟ انقر هنا لفت
|
||||
hub.receive.message=معالجة الاستجابة…
|
||||
hub.receive.description=Cryptomator يتلقى ويعالج الاستجابة من المركز. الرجاء الانتظار.
|
||||
### Register Device
|
||||
hub.register.message=جهاز جديد
|
||||
hub.register.description=هذا هو أول وصول مركزي من هذا الجهاز. الرجاء تسجيله باستخدام مفتاح الحساب الخاص بك.
|
||||
hub.register.nameLabel=اسم الجهاز
|
||||
hub.register.occupiedMsg=الاسم مستخدم مسبقاً
|
||||
hub.register.registerBtn=تأكيد
|
||||
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.message=تم تسجيل الجهاز
|
||||
hub.registerSuccess.description=تم تسجيل جهازك بنجاح. يمكنك الآن المتابعة لفتح الخزنة.
|
||||
hub.registerSuccess.unlockBtn=افتح
|
||||
hub.registerSuccess.legacy.description=للدخول إلى الخزينة، يحتاج جهازك كذالك إلى إذن من مالك الخزينة.
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=أخفق في تسمية الجهاز
|
||||
hub.registerFailed.description=خطأ في عملية التسمية. لمزيد من التفاصيل، انظر إلى سجل التطبيق.
|
||||
hub.registerFailed.message=فشل تسجيل الجهاز
|
||||
hub.registerFailed.description.generic=حدث خطأ في عملية تسجيل الاسم. لمزيد من التفاصيل، راجع سجل التطبيق.
|
||||
hub.registerFailed.description.deviceAlreadyExists=هذا الجهاز مسجل لمستخدم مختلف بالفعل. حاول تغيير حساب المستخدم أو استخدام جهاز مختلف.
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=تم رفض الوصول
|
||||
hub.unauthorized.description=لم يتم بعد منح الإذن لجهازك بالوصول إلى هذا المخزن. اطلب من مالك المخزن أن يأذن بذلك.
|
||||
### Requires Account Initialization
|
||||
hub.requireAccountInit.message=مطلوب اتخاذ إجراء
|
||||
hub.requireAccountInit.description.0=للمتابعة، يرجى إكمال الخطوات المطلوبة في
|
||||
hub.requireAccountInit.description.1=ملف تعريف المستخدم
|
||||
hub.requireAccountInit.description.2=.
|
||||
### License Exceeded
|
||||
hub.invalidLicense.message=ترخيص المركز غير صالح
|
||||
hub.invalidLicense.description=نموذج المركز Cryptomator الخاص بك لديه ترخيص غير صالح. الرجاء إبلاغ مسؤول مركز لترقية أو تجديد الترخيص.
|
||||
@@ -283,26 +299,46 @@ preferences.interface.language.auto=النظام الافتراضي
|
||||
preferences.interface.interfaceOrientation=اتجاه الواجهة
|
||||
preferences.interface.interfaceOrientation.ltr=من اليسار إلى اليمين
|
||||
preferences.interface.interfaceOrientation.rtl=من اليمين إلى اليسار
|
||||
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=مجلد مخصص كنقطة تحميل
|
||||
preferences.volume.feature.mountToDriveLetter=استخدام حرف وحدة التخزين كنقطة تحميل
|
||||
preferences.volume.feature.mountFlags=خيارات التثبيت المخصصة
|
||||
preferences.volume.feature.readOnly=تحميل للقراءة فقط
|
||||
## Updates
|
||||
preferences.updates=تحديثات
|
||||
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
|
||||
preferences.contribute.noCertificate=ادعم Cryptomator واحصل على شهادة الداعم. إنها مثل مفتاح الترخيص لكن للأشخاص الرائعين الذين يستخدمون البرامج المجانية ؛-)
|
||||
preferences.contribute.getCertificate=ليس لديك واحدة بعد؟ تعلم كيف يمكنك الحصول عليها.
|
||||
preferences.contribute.promptText=قم بلصق رمز شهادة الداعم هنا
|
||||
preferences.contribute.donate=تبرع
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.title=إزالة الشهادة
|
||||
removeCert.message=إزالة شهادة الداعم؟
|
||||
removeCert.confirmBtn=حذف
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -313,21 +349,37 @@ 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.read.total.data.none=بيانات القراءة: -
|
||||
stats.read.total.data.kib=بيانات القراءة: %.1f كيلوبايت
|
||||
stats.read.total.data.mib=بيانات القراءة: %.1f ميجابايت
|
||||
stats.read.total.data.gib=بيانات القراءة: %.1f جيجابايت
|
||||
stats.decr.total.data.none=تم فك تشفير البيانات:-
|
||||
stats.decr.total.data.kib=البيانات المفكوكة: %.1f كيلوبايت
|
||||
stats.decr.total.data.mib=البيانات المفكوكة: %.1f ميجابايت
|
||||
stats.decr.total.data.gib=البيانات المفكوكة: %.1f جيجابايت
|
||||
stats.read.accessCount=مجموع القراءات: %d
|
||||
## Write
|
||||
stats.write.throughput.idle=الكتابة: خامل
|
||||
stats.write.throughput.kibs=الكتابة: %.2f كيلوبايت/ثانية
|
||||
stats.write.throughput.mibs=الكتابة: %.2f ميجابايت/ثانية
|
||||
stats.write.total.data.none=البيانات المكتوبة: -
|
||||
stats.write.total.data.kib=البيانات المكتوبة: %.1f كيلوبايت
|
||||
stats.write.total.data.mib=البيانات المكتوبة: %.1f م.ب
|
||||
stats.write.total.data.gib=البيانات المكتوبة: %.1f ج.ب
|
||||
stats.encr.total.data.none=البيانات المشفرة: -
|
||||
stats.encr.total.data.kib=البيانات المشفرة: %.1f كيلوبايت
|
||||
stats.encr.total.data.mib=البيانات المشفرة: %.1f ميجابايت
|
||||
stats.encr.total.data.gib=البيانات المشفرة: %.1f جيجابايت
|
||||
stats.write.accessCount=مجموع الكتابات: %d
|
||||
|
||||
## Accesses
|
||||
stats.access.current=الوصول: %d
|
||||
stats.access.total=مجموع الوصول: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=إغلاق
|
||||
main.minimizeBtn.tooltip=تصغير
|
||||
main.preferencesBtn.tooltip=تفضيلات
|
||||
main.debugModeEnabled.tooltip=تم تمكين وضع التصحيح
|
||||
main.supporterCertificateMissing.tooltip=يرجى النظر في تقديم تبرعات
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=انقر هنا لإضافة خزنة
|
||||
main.vaultlist.contextMenu.remove=حذف…
|
||||
@@ -336,7 +388,7 @@ main.vaultlist.contextMenu.unlock=فتح…
|
||||
main.vaultlist.contextMenu.unlockNow=افتح الان
|
||||
main.vaultlist.contextMenu.vaultoptions=إظهار خيارات المخزن
|
||||
main.vaultlist.contextMenu.reveal=اظهار القرص
|
||||
main.vaultlist.addVaultBtn=إضافة
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=شكرا لاختيار Cryptomator لحماية ملفاتك. إذا كنت بحاجة إلى أية مساعدة، تحقق من دليل وتعليمات الإستخدام:
|
||||
@@ -346,14 +398,17 @@ main.vaultDetail.unlockBtn=فتح…
|
||||
main.vaultDetail.unlockNowBtn=فتح القفل الان
|
||||
main.vaultDetail.optionsBtn=خيارات المخزن
|
||||
main.vaultDetail.passwordSavedInKeychain=تم حفظ كلمة المرور
|
||||
main.vaultDetail.share=مشاركة…
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=مفتوح
|
||||
main.vaultDetail.accessLocation=يمكن الوصول إلى محتويات مخزنك هنا:
|
||||
main.vaultDetail.revealBtn=اظهار القرص
|
||||
main.vaultDetail.copyUri=نسخ الرابط
|
||||
main.vaultDetail.lockBtn=قفل
|
||||
main.vaultDetail.bytesPerSecondRead=قراءة:
|
||||
main.vaultDetail.bytesPerSecondWritten=كتابة:
|
||||
main.vaultDetail.throughput.idle=خمول
|
||||
main.vaultDetail.throughput.kbps=%.1f كيلوبايت/ث
|
||||
main.vaultDetail.throughput.mbps=%.1f ميجابايت/ث
|
||||
main.vaultDetail.stats=إحصائيات الخزنة
|
||||
main.vaultDetail.locateEncryptedFileBtn=تحديد موقع الملف المشفر
|
||||
@@ -369,6 +424,9 @@ main.vaultDetail.missing.changeLocation=تغيير موقع الخزنة…
|
||||
main.vaultDetail.migrateButton=ترقية الحافظة
|
||||
main.vaultDetail.migratePrompt=يجب ترقية المخزن الخاص بك إلى تنسيق جديد، قبل أن تتمكن من الوصول إليه
|
||||
### Error
|
||||
main.vaultDetail.error.info=حدث خطأ أثناء تحميل الخزانة من القرص الصلب.
|
||||
main.vaultDetail.error.reload=إعادة تحميل
|
||||
main.vaultDetail.error.windowTitle=خطأ في تحميل الخزنة
|
||||
|
||||
# Wrong File Alert
|
||||
wrongFileAlert.title=كيفية تشفير الملفات
|
||||
@@ -384,43 +442,70 @@ wrongFileAlert.link=لمزيد من المساعدة، قم بزيارة
|
||||
## General
|
||||
vaultOptions.general=عام
|
||||
vaultOptions.general.vaultName=اسم المخزن
|
||||
vaultOptions.general.autoLock.lockAfterTimePart1=قفل عند الخمول لمدة
|
||||
vaultOptions.general.autoLock.lockAfterTimePart2=دقائق
|
||||
vaultOptions.general.unlockAfterStartup=فتح قفل المخزن عند بدء تشغيل Cryptomator
|
||||
vaultOptions.general.actionAfterUnlock=بعد فتح القفل بنجاح
|
||||
vaultOptions.general.actionAfterUnlock.ignore=لا تفعل شيئاً
|
||||
vaultOptions.general.actionAfterUnlock.reveal=إظهار القرص
|
||||
vaultOptions.general.actionAfterUnlock.ask=اسأل
|
||||
vaultOptions.general.startHealthCheckBtn=بدء فحص الصحة
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=القرص الوهمي
|
||||
vaultOptions.mount.info=افتح تفضيلات القرص الظاهري لتغيير الإعدادات الافتراضية.
|
||||
vaultOptions.mount.readonly=للقراءة فقط
|
||||
vaultOptions.mount.customMountFlags=الأعلام المخصصة
|
||||
vaultOptions.mount.winDriveLetterOccupied=مشغول
|
||||
vaultOptions.mount.mountPoint=موقع التحميل الوهمي
|
||||
vaultOptions.mount.mountPoint.auto=اختيار موقع مناسب تلقائياً
|
||||
vaultOptions.mount.mountPoint.driveLetter=استخدام دالة قرص معين
|
||||
vaultOptions.mount.mountPoint.custom=استخدام المجلد المختار
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=اختر…
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=إختر مجلد
|
||||
vaultOptions.mount.volumeType.default=الافتراضي (%s)
|
||||
vaultOptions.mount.volumeType.restartRequired=لاستخدام هذا النوع من وحدة التخزين يحتاج Cryptomator إلى إعادة تشغيله.
|
||||
vaultOptions.mount.volume.tcp.port=منفذ TCP
|
||||
vaultOptions.mount.volume.type=نوع وحدة التخزين
|
||||
## Master Key
|
||||
vaultOptions.masterkey=كلمة المرور
|
||||
vaultOptions.masterkey.changePasswordBtn=تغيير كلمة المرور
|
||||
vaultOptions.masterkey.forgetSavedPasswordBtn=نسيان كلمة المرور المحفوظة
|
||||
vaultOptions.masterkey.recoveryKeyExplanation=مفتاح الاسترداد هو وسيلتك الوحيدة لاستعادة الوصول إلى مخزنك إذا فقدت كلمة المرور.
|
||||
vaultOptions.masterkey.showRecoveryKeyBtn=عرض مفتاح الاسترداد
|
||||
vaultOptions.masterkey.recoverPasswordBtn=إعادة تعيين كلمة المرور
|
||||
## Hub
|
||||
vaultOptions.hub=الإسترداد
|
||||
vaultOptions.hub.convertInfo=يمكنك استخدام مفتاح الاسترداد لتحويل هذه خزانة Hub إلى خزانة تعتمد على كلمة مرور في حالة الطوارئ.
|
||||
vaultOptions.hub.convertBtn=التحويل إلى خزانة قائمة على كلمة المرور
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
recoveryKey.display.title=إظهار مفتاح الاسترداد
|
||||
recoveryKey.create.message=مطلوب كلمة المرور
|
||||
recoveryKey.create.description=أدخل كلمة المرور الخاصة بك لإظهار مفتاح الاسترداد ل "%s":
|
||||
recoveryKey.display.description=يمكن استخدام مفتاح الاسترداد التالي لاستعادة الوصول إلى "%s":
|
||||
recoveryKey.display.StorageHints=حافظ عليه في مكان ما آمن جداً، على سبيل المثال\n • تخزينه باستخدام مدير كلمات المرور\n • حفظه على محرك أقراص خارجي USB\n • كتابته أو طباعته على الورق
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
recoveryKey.recover.title=إعادة تعيين كلمة المرور
|
||||
recoveryKey.recover.prompt=أدخل مفتاح الاسترداد لـ "%s":
|
||||
recoveryKey.recover.correctKey=هذا مفتاح استرداد صالح
|
||||
recoveryKey.recover.wrongKey=مفتاح الاسترداد هذا ينتمي إلى خزانة مختلفة
|
||||
recoveryKey.recover.invalidKey=مفتاح الاسترداد غير صالح
|
||||
recoveryKey.printout.heading=مفتاح استرداد Cryptomator\n"%s"\n
|
||||
### Reset Password
|
||||
recoveryKey.recover.resetBtn=إعادة الضبط
|
||||
### Recovery Key Password Reset Success
|
||||
recoveryKey.recover.resetSuccess.message=تم إعادة تعيين كلمة المرور بنجاح
|
||||
recoveryKey.recover.resetSuccess.description=يمكنك فتح الخزانة الخاصة بك بكلمة المرور الجديدة.
|
||||
|
||||
# Convert Vault
|
||||
convertVault.title=تحويل الخزانة
|
||||
convertVault.convert.convertBtn.before=حوّل
|
||||
convertVault.convert.convertBtn.processing=جاري التحويل…
|
||||
convertVault.success.message=تم التحويل بنجاح
|
||||
convertVault.hubToPassword.success.description=يمكنك الآن فتح الخزانة باستخدام كلمة المرور المختارة دون الحاجة إلى الوصول إلى Hub.
|
||||
|
||||
# New Password
|
||||
newPassword.promptText=أدخل كلمة مرور جديدة
|
||||
@@ -435,8 +520,46 @@ passwordStrength.messageLabel.3=قوية
|
||||
passwordStrength.messageLabel.4=قوية جداً
|
||||
|
||||
# Quit
|
||||
quit.title=إغلاق التطبيق
|
||||
quit.message=هناك خزانات مفتوحة
|
||||
quit.description=يرجى تأكيد رغبتك في الخروج. سيقوم Cryptomator بقفل جميع الخزائن غير المقفلة بشكل آمن لمنع فقدان البيانات.
|
||||
quit.lockAndQuitBtn=قفل و خروج
|
||||
|
||||
# Forced Quit
|
||||
quit.forced.message=بعض الخزائن لم أتمكن من قفلها
|
||||
quit.forced.description=تم حظر قفل الخزنات بسبب العمليات المعلقة أو الملفات المفتوحة. يمكنك فرض قفل الخزنات المتبقية، ولكن قد يؤدي مقاطعة عمليات الإدخال/الإخراج إلى فقدان البيانات غير المحفوظة.
|
||||
quit.forced.forceAndQuitBtn=فرض وإغلاق
|
||||
|
||||
# Update Reminder
|
||||
# Update Reminder
|
||||
updateReminder.title=التحقق من التحديث
|
||||
updateReminder.message=التحقق من التحديثات؟
|
||||
updateReminder.description=ابقَ على اطلاع بأحدث الميزات، وإصلاحات الأخطاء، وتحسينات الأمان. نوصي بالتحقق التلقائي من التحديثات.
|
||||
updateReminder.notNow=ليس الآن
|
||||
updateReminder.yesOnce=نعم، مرة واحدة
|
||||
updateReminder.yesAutomatically=نعم، تلقائياً
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.title=إشعار بإيقاف الدعم
|
||||
dokanySupportEnd.message=انتهاء الدعم لـDokany
|
||||
dokanySupportEnd.description=نوع وحدة التخزين Dokany لم يعد مدعوماً من قبل Cryptomator. تم تعديل إعداداتك لاستخدام نوع وحدة التخزين الافتراضي الآن. يمكنك عرض النوع الافتراضي في التفضيلات.
|
||||
dokanySupportEnd.preferencesBtn=فتح التفضيلات
|
||||
|
||||
# Share Vault
|
||||
shareVault.title=مشاركة الخزانة
|
||||
shareVault.message=هل ترغب في مشاركة خزانتك مع الآخرين؟
|
||||
shareVault.description=كن حذرًا دائمًا عند مشاركة خزانتك مع الآخرين. باختصار، اتبع هذه الخطوات:
|
||||
shareVault.instruction.1=1. شارك الوصول إلى مجلد الخزانة المشفر عبر التخزين السحابي.
|
||||
shareVault.instruction.2=2. شارك كلمة مرور الخزانة بطريقة آمنة.
|
||||
shareVault.remarkBestPractices=لمزيد من المعلومات، تحقق من اقتراحات أفضل الممارسات في مستنداتنا.
|
||||
shareVault.docsTooltip=افتح وثائق البرنامج Documentation لتعلم المزيد عن مشاركة الخزائن.
|
||||
shareVault.hubAd.description=الطريقة الآمنة للعمل ضمن الفرق
|
||||
shareVault.hubAd.keyManagement=• إدارة المفاتيح بدون معرفة
|
||||
shareVault.hubAd.authentication=• مصادقة قوية
|
||||
shareVault.hubAd.encryption=• التشفير من الطرف إلى الطرف
|
||||
shareVault.visitHub=زيارة Cryptomator Hub
|
||||
|
||||
shareVault.hub.message=كيفية مشاركة خزانة Hub
|
||||
shareVault.hub.description=لمشاركة محتوى الخزانة مع عضو آخر في الفريق، عليك القيام بخطوتين:
|
||||
shareVault.hub.instruction.1=1. شارك الوصول إلى مجلد الخزانة المشفر عبر التخزين السحابي.
|
||||
shareVault.hub.instruction.2=2. امنح الوصول لعضو الفريق في Cryptomator Hub.
|
||||
shareVault.hub.openHub=زيارة Cryptomator Hub
|
||||
@@ -141,8 +141,6 @@ 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.fuseRestartRequired.message=Һаҡлағыс биген сисеп булманы
|
||||
unlock.error.fuseRestartRequired.description=Һаҡлағыс параметрҙарында күләм төрөн үҙгәртеү йәки Cryptomator-ҙы яңынан башлатыу.
|
||||
unlock.error.title="%s" биге асылманы
|
||||
## Hub
|
||||
hub.noKeychain.message=Йыһаз асҡысына инеү рөхсәте юҡ
|
||||
@@ -157,17 +155,13 @@ hub.receive.message=Яуапты эшкәртеү…
|
||||
hub.receive.description=Cryptomator хабтан килгән яуапты ҡабул итә һәм эшкәртә. Зинһар, көтөгөҙ.
|
||||
### Register Device
|
||||
hub.register.message=Яңы йыһаз
|
||||
hub.register.description=Был йыһаздан хабҡа тәү тапҡыр инеү. Зинһар, иҫәп яҙмаһы асҡысы менән рөхсәт бирегеҙ.
|
||||
hub.register.nameLabel=Йыһаз исеме
|
||||
hub.register.invalidAccountKeyLabel=Хаталы иҫәп яҙмаһы асҡысы
|
||||
hub.register.occupiedMsg=Исем ҡулланыла инде
|
||||
hub.register.registerBtn=Раҫла
|
||||
hub.register.registerBtn=Теркәл
|
||||
### Register Device Legacy
|
||||
### Registration Success
|
||||
hub.registerSuccess.message=Йыһаз исемләнде
|
||||
hub.registerSuccess.description=Һаҡлағысҡа инеү өсөн һаҡлағыс хужаһы йыһазығыҙға инеү рөхсәте бирергә тейеш.
|
||||
hub.registerSuccess.unlockBtn=Биген ас
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=Йыһазға исем биреп булманы
|
||||
hub.registerFailed.description=Исемләү процесында хата килеп сыҡты. Тулыраҡ мәғлүмәт өсөн ҡушымта журналын ҡарағыҙ.
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=Инеү кире ҡағылды
|
||||
hub.unauthorized.description=Һеҙҙең йыһаз әлегә был һаҡлағысҡа инеү хоҡуғына эйә түгел. Һаҡлағыс хужаһынан рөхсәт һорағыҙ.
|
||||
@@ -293,7 +287,6 @@ preferences.interface.language.auto=Ғәҙәттәге система көйлә
|
||||
preferences.interface.interfaceOrientation=Интерфейс йүнәлеше
|
||||
preferences.interface.interfaceOrientation.ltr=Һулдан уңға
|
||||
preferences.interface.interfaceOrientation.rtl=Уңдан һулға
|
||||
preferences.interface.showMinimizeButton=Бәләкәйләтеү төймәһен күрһәтергә
|
||||
preferences.interface.showTrayIcon=Панелдә билдәне күрһәтергә (яңынан башлатыу кәрәк)
|
||||
## Volume
|
||||
preferences.volume=Виртуаль диск
|
||||
@@ -314,12 +307,16 @@ preferences.updates.currentVersion=Ағымдағы версия: %s
|
||||
preferences.updates.autoUpdateCheck=Яңыртыуҙарҙы автоматик рәүештә тикшереү
|
||||
preferences.updates.checkNowBtn=Хәҙер тикшер
|
||||
preferences.updates.updateAvailable=%s версияһына тиклем яңыртыу бар.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Ярҙам
|
||||
preferences.contribute.registeredFor=%s өсөн теркәлгән ярҙамсы сертификаты
|
||||
preferences.contribute.noCertificate=Cryptomator-ҡа ярҙам итегеҙ һәм ярҙамсы сертификаты алығыҙ. Был рөхсәтнамә асҡысы кеүек, әммә ирекле программа ҡулланған бик шәп кешеләр өсөн. ;-)
|
||||
preferences.contribute.getCertificate=Юҡ мы әллә? Уны нисек алырға кәрәклеген ҡарағыҙ.
|
||||
preferences.contribute.promptText=Ярҙамсы сертификатын бында йәбештерегеҙ
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.confirmBtn=Алып ташлау
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -361,11 +358,6 @@ stats.access.total=Барлыҡ инеү: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Яп
|
||||
main.minimizeBtn.tooltip=Бәләкәйләт
|
||||
main.preferencesBtn.tooltip=Көйләүҙәр
|
||||
main.debugModeEnabled.tooltip=Төҙөкләндереү режимы асыҡ
|
||||
main.supporterCertificateMissing.tooltip=Зинһар, иғәнә биреү тураһында уйлағыҙ
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Һаҡлағыс өҫтәү өсөн бында баҫығыҙ
|
||||
main.vaultlist.contextMenu.remove=Алып ташлау…
|
||||
@@ -374,9 +366,7 @@ main.vaultlist.contextMenu.unlock=Бикте асыу…
|
||||
main.vaultlist.contextMenu.unlockNow=Хәҙер бикте ас
|
||||
main.vaultlist.contextMenu.vaultoptions=Һаҡлағыс варианттарын күрһәт
|
||||
main.vaultlist.contextMenu.reveal=Дискты күрһәт
|
||||
main.vaultlist.addVaultBtn=Өҫтәү
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Яңы Һаҡлағыс...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Булған һаҡлағыс...
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Файлдарығыҙҙы һаҡлау өсөн Cryptomator-ҙы һайлағанығыҙ өсөн рәхмәт. Әгәр һеҙгә ярҙам кәрәк булһа, башлау буйынса белешмәләребеҙҙе ҡарағыҙ:
|
||||
@@ -451,7 +441,6 @@ vaultOptions.mount.mountPoint.custom=Һайланған каталог ҡулл
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Һайла…
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Каталог һайлау
|
||||
vaultOptions.mount.volumeType.default=Ғәҙәттәгеләр (%s)
|
||||
vaultOptions.mount.volumeType.fuseRestartRequired=Был том төрөн ҡулланыу өсөн Cryptomator-ҙы яңынан асыу кәрәк.
|
||||
vaultOptions.mount.volume.tcp.port=TCP порты
|
||||
vaultOptions.mount.volume.type=Том төрө
|
||||
## Master Key
|
||||
@@ -498,17 +487,34 @@ convertVault.hubToPassword.success.description=Хәҙер һеҙ һайланғ
|
||||
newPassword.promptText=Яңы серһүҙ яҙығыҙ
|
||||
newPassword.reenterPassword=Яңы серһүҙҙе раҫлағыҙ
|
||||
newPassword.passwordsMatch=Серһүҙҙәр тап килә!
|
||||
newPassword.passwordsDoNotMatch=Серһүҙҙәр тап килмәй
|
||||
passwordStrength.messageLabel.tooShort=Кәмендә %d билдә ҡулланығыҙ
|
||||
passwordStrength.messageLabel.0=Бик көсһөҙ
|
||||
passwordStrength.messageLabel.1=Көсһөҙ
|
||||
passwordStrength.messageLabel.2=Уртаса
|
||||
passwordStrength.messageLabel.3=Көслө
|
||||
passwordStrength.messageLabel.4=Бик көслө
|
||||
|
||||
# Quit
|
||||
quit.title=Ҡушымтанан сығыу
|
||||
quit.message=Асыҡ һаҡлағыстар бар
|
||||
quit.description=Сығырға теләүегеҙҙе раҫлағыҙ. Cryptomator мәғлүмәтте юғалтыуҙан һаҡлар өсөн бөтә һаҡлағыстарҙы бикләп ҡуя.
|
||||
quit.lockAndQuitBtn=Биклә һәм сыҡ
|
||||
|
||||
# Forced Quit
|
||||
quit.forced.message=Ҡайһы бер һаҡлағыстарҙы бикләп булмай
|
||||
quit.forced.description=Көтөп торған ғәмәлдәр йәки асыҡ файлдар һаҡлағыстарҙы бикләүҙе тотҡарланы. Был һаҡлағыстарҙы көсләп бикләп була, ләкин инеү-сығыуҙы өҙөү һаҡланмаған мәғлүмәттәрҙе юғалтыуға килтереүе ихтимал.
|
||||
quit.forced.forceAndQuitBtn=Көсләп биклә һәм сыҡ
|
||||
|
||||
# Update Reminder
|
||||
updateReminder.title=Яңыртыуҙарҙы тикшереү
|
||||
updateReminder.message=Яңыртыуҙарҙы тикшерергәме?
|
||||
updateReminder.description=Яңы үҙенсәлектәр, хаталарҙы төҙәтеү, хәүефһеҙлекте яҡшыртыу менән яңыртылып торорға. Яңыртыуҙарҙы автоматик рәүештә тикшереүҙе кәңәш итәбеҙ.
|
||||
updateReminder.notNow=Хәҙер түгел
|
||||
updateReminder.yesOnce=Эйе, бер тапҡыр
|
||||
updateReminder.yesAutomatically=Эйе, автоматик рәүештә
|
||||
updateReminder.yesAutomatically=Эйе, автоматик рәүештә
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Көйләүҙәрҙе ас
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -151,14 +151,10 @@ hub.receive.description=Cryptomator атрымлівае ды апрацоўва
|
||||
### Register Device
|
||||
hub.register.message=Новая прылада
|
||||
hub.register.nameLabel=Назва прылады
|
||||
hub.register.occupiedMsg=Назва ўжо ўжытая
|
||||
hub.register.registerBtn=Пацвердзіць
|
||||
### Register Device Legacy
|
||||
### Registration Success
|
||||
hub.registerSuccess.message=Прылада атрымала назву
|
||||
hub.registerSuccess.description=Каб атрымаць доступ да скарбніцы, твая прылада мусіць быць спраўджанай уладальнікам скарбніцы.
|
||||
hub.registerSuccess.unlockBtn=Адамкнуць
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=Памылка пры называнні прылады
|
||||
hub.registerFailed.description=Падчас прысваення імя адбылася памылка. Па дэтальную інфармацыю звярніся да пратаколу праграмы.
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=Адмова ў доступе
|
||||
hub.unauthorized.description=Тваёй прыладзе ў дадзены момант не дазволена мець доступ да гэтай скрабніцы. Запытайся ўладальніка скрабніцы за дазволам.
|
||||
@@ -280,7 +276,6 @@ preferences.interface.language.auto=Сістэма па змаўчанні
|
||||
preferences.interface.interfaceOrientation=Арыентацыя інтэрфэйсу
|
||||
preferences.interface.interfaceOrientation.ltr=Злева ўправа
|
||||
preferences.interface.interfaceOrientation.rtl=Справа ўлева
|
||||
preferences.interface.showMinimizeButton=Паказаць кнопку згортвання
|
||||
preferences.interface.showTrayIcon=Паказваць іконку на інфармацыйнай панэлі (спатрэбіцца перазапуск)
|
||||
## Volume
|
||||
preferences.volume=Віртуальны дыск
|
||||
@@ -299,12 +294,16 @@ preferences.updates.currentVersion=Бягучая версія: %s
|
||||
preferences.updates.autoUpdateCheck=Правяраць наяўнасць абнаўленняў аўтаматычна
|
||||
preferences.updates.checkNowBtn=Праверыць зараз
|
||||
preferences.updates.updateAvailable=Даступна абнаўленне да версіі %s
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Падтрымай нас
|
||||
preferences.contribute.registeredFor=Сэртыфікат ахвяравальніка зарэгістраваны на %s
|
||||
preferences.contribute.noCertificate=Ахвяруй на Cryptomator ды атрымай сэртыфікат ахвяравальніка. Гэта штось падобнае на ліцэнзійны ключ, але для цудоўных людзей, якія карыстаюцца бясплатнай праграмай. ;-)
|
||||
preferences.contribute.getCertificate=Яшчэ ня маеш такога? Даведайся, як атрымаць.
|
||||
preferences.contribute.promptText=Устаў код сэртыфікату ахвяравальніка сюды
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.confirmBtn=Выдаліць
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -346,11 +345,6 @@ stats.access.total=Доступы агулам: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Зачыніць
|
||||
main.minimizeBtn.tooltip=Згарнуць
|
||||
main.preferencesBtn.tooltip=Налады
|
||||
main.debugModeEnabled.tooltip=Функццыя дыягназавання выключана
|
||||
main.supporterCertificateMissing.tooltip=Калі ласка, падумай пра ахвяраванне
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Пстрыкні тут, каб дадаць скарбніцу
|
||||
main.vaultlist.contextMenu.remove=Выдаліць…
|
||||
@@ -359,9 +353,7 @@ main.vaultlist.contextMenu.unlock=Адамкнуць…
|
||||
main.vaultlist.contextMenu.unlockNow=Разамкнуць зараз
|
||||
main.vaultlist.contextMenu.vaultoptions=Паказаць параметры скарбніцы
|
||||
main.vaultlist.contextMenu.reveal=Паказаць дыск
|
||||
main.vaultlist.addVaultBtn=Дадаць
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Новая скарбніца...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Існуючая скрабніца...
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Дзякуй, што ты абраў Cryptomator для абароны тваіх файлаў. Калі табе патрэбна дапамога, калі ласка, паглядзі нашы інструкцыі:
|
||||
@@ -500,4 +492,9 @@ updateReminder.title=Праверка абнаўленняў
|
||||
updateReminder.message=Ці праверыць абнаўленні?
|
||||
updateReminder.notNow=Не цяпер
|
||||
updateReminder.yesOnce=Так, аднойчы
|
||||
updateReminder.yesAutomatically=Так, аўтаматычна
|
||||
updateReminder.yesAutomatically=Так, аўтаматычна
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Адчыніць налады
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -141,8 +141,6 @@ 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.fuseRestartRequired.message=Хранилището не може да бъде отключено
|
||||
unlock.error.fuseRestartRequired.description=Променете вида на тома в настройките на хранилището или рестартирайте Криптоматор.
|
||||
unlock.error.title=Неуспешно отключване на „%s“
|
||||
## Hub
|
||||
hub.noKeychain.message=Няма достъп до ключа на устройството
|
||||
@@ -157,17 +155,13 @@ hub.receive.message=Обработване на отговора…
|
||||
hub.receive.description=Криптоматор получава и обработва отговора от Hub. Изчакайте.
|
||||
### Register Device
|
||||
hub.register.message=Ново устройство
|
||||
hub.register.description=За пръв път посещавате Hub от това устройство. Удостоверете го, като използвате ключа на профила.
|
||||
hub.register.nameLabel=Име на устройството
|
||||
hub.register.invalidAccountKeyLabel=Неприемлив ключ на профила
|
||||
hub.register.occupiedMsg=Това име вече е заето
|
||||
hub.register.registerBtn=Потвърждаване
|
||||
hub.register.registerBtn=Регистриране
|
||||
### Register Device Legacy
|
||||
### Registration Success
|
||||
hub.registerSuccess.message=Устройството е именувано
|
||||
hub.registerSuccess.description=За да получи достъп до хранилището, устройството трябва да бъде упълномощено от собственика на хранилището.
|
||||
hub.registerSuccess.unlockBtn=Отключване
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=Грешка при именуване на устройството
|
||||
hub.registerFailed.description=В процеса на именуване е допусната грешка. За повече подробности разгледайте дневника на приложението.
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=Отказан достъп
|
||||
hub.unauthorized.description=Устройството не е упълномощено за достъп до това хранилище. Поискайте достъп от собственика.
|
||||
@@ -293,7 +287,6 @@ preferences.interface.language.auto=Подразбиран
|
||||
preferences.interface.interfaceOrientation=Посока на текста
|
||||
preferences.interface.interfaceOrientation.ltr=От ляво на дясно
|
||||
preferences.interface.interfaceOrientation.rtl=От дясно на ляво
|
||||
preferences.interface.showMinimizeButton=Бутон за скриване
|
||||
preferences.interface.showTrayIcon=Икона в областта за известия (изисква рестарт)
|
||||
## Volume
|
||||
preferences.volume=Виртуален диск
|
||||
@@ -314,12 +307,16 @@ preferences.updates.currentVersion=Текущо издание: %s
|
||||
preferences.updates.autoUpdateCheck=Автоматична проверка за издания
|
||||
preferences.updates.checkNowBtn=Проверяване
|
||||
preferences.updates.updateAvailable=Налично е ново издание %s.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Подкрепете ни
|
||||
preferences.contribute.registeredFor=Сертификатът за дарение е регистриран на %s
|
||||
preferences.contribute.noCertificate=Ако подкрепите Криптоматор ще получите сертификат за дарение. Това е като лицензен ключ, но за готини хора, които използват безплатен софтуер. ;-)
|
||||
preferences.contribute.getCertificate=Все още нямате? Научете как да се сдобиете.
|
||||
preferences.contribute.promptText=Поставете тук кода на сертификата за дарение
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.confirmBtn=Премахване
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -361,11 +358,6 @@ stats.access.total=Общо достъпвания: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Затваряне
|
||||
main.minimizeBtn.tooltip=Скриване
|
||||
main.preferencesBtn.tooltip=Настройки
|
||||
main.debugModeEnabled.tooltip=Режимът за премахване на дефекти е включен
|
||||
main.supporterCertificateMissing.tooltip=Обмислете дарение
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Щракнете, за да добавите хранилище
|
||||
main.vaultlist.contextMenu.remove=Премахване…
|
||||
@@ -374,9 +366,7 @@ main.vaultlist.contextMenu.unlock=Отключване…
|
||||
main.vaultlist.contextMenu.unlockNow=Отключване сега
|
||||
main.vaultlist.contextMenu.vaultoptions=Настройки на хранилището
|
||||
main.vaultlist.contextMenu.reveal=Разкриване на диска
|
||||
main.vaultlist.addVaultBtn=Добавяне
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Ново хранилище…
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Съществуващо хранилище…
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Благодарим ви, че избрахте Криптоматор, за да предпазвате файловете си. Ако имате нужда от съдействие прочетете ръководствата за започване на работа с приложението:
|
||||
@@ -451,7 +441,6 @@ vaultOptions.mount.mountPoint.custom=Използване на избрана п
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Избиране…
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Избиране на папка
|
||||
vaultOptions.mount.volumeType.default=По подразбиране (%s)
|
||||
vaultOptions.mount.volumeType.fuseRestartRequired=За да използвате този вид томове, трябва да рестартирате Криптоматор.
|
||||
vaultOptions.mount.volume.tcp.port=Порт на TCP
|
||||
vaultOptions.mount.volume.type=Вид на тома
|
||||
## Master Key
|
||||
@@ -523,4 +512,9 @@ updateReminder.message=Проверяване за обновяване?
|
||||
updateReminder.description=Получавайте нови възможности на приложението, поправки на дефекти и подобрения на сигурността. Препоръчваме ви автоматичното обновяване.
|
||||
updateReminder.notNow=Не сега
|
||||
updateReminder.yesOnce=Да, веднъж
|
||||
updateReminder.yesAutomatically=Да, автоматично
|
||||
updateReminder.yesAutomatically=Да, автоматично
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Към настройките
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -20,6 +20,7 @@ error.description=ওহো! ক্রিপ্টোমেটর এটা য
|
||||
error.hyperlink.lookup=ত্রুটিটি খুঁজে দেখুন
|
||||
error.hyperlink.report=ত্রুটিটি রিপোর্ট করুন
|
||||
error.technicalDetails=বিস্তারিত:
|
||||
error.existingSolutionDescription=এটা হওয়ার কথা ছিল না. যদিও এ সমস্যার জন্য বিদ্যমান একটি সমাধান রয়েছে. অনুগ্রহ করে লিংকটিতে যান.
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=ভোল্ট
|
||||
@@ -89,8 +90,9 @@ unlock.unlockBtn=আনলক করুন
|
||||
### Waiting
|
||||
### Receive Key
|
||||
### Register Device
|
||||
hub.register.registerBtn=নিশ্চিত করুন
|
||||
### Register Device Legacy
|
||||
### Registration Success
|
||||
hub.registerSuccess.unlockBtn=আনলক করুন
|
||||
### Registration Failed
|
||||
### Unauthorized
|
||||
### Requires Account Initialization
|
||||
@@ -121,7 +123,11 @@ lock.forced.retryBtn=পুনরায় চেষ্টা করুন
|
||||
## Interface
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
## Contribution
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.confirmBtn=বাতিল
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -134,9 +140,9 @@ lock.forced.retryBtn=পুনরায় চেষ্টা করুন
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=বন্ধ করুন
|
||||
## Vault List
|
||||
main.vaultlist.contextMenu.lock=লক করুন
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
### Locked
|
||||
@@ -172,4 +178,8 @@ vaultOptions.mount.mountPoint.directoryPickerButton=নির্বাচন ক
|
||||
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -105,8 +105,9 @@ unlock.success.revealBtn=Otkrij pogon
|
||||
### Waiting
|
||||
### Receive Key
|
||||
### Register Device
|
||||
hub.register.registerBtn=Potvrdi
|
||||
### Register Device Legacy
|
||||
### Registration Success
|
||||
hub.registerSuccess.unlockBtn=Otključaj
|
||||
### Registration Failed
|
||||
### Unauthorized
|
||||
### Requires Account Initialization
|
||||
@@ -170,7 +171,11 @@ 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
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.confirmBtn=Ukloni
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -204,11 +209,6 @@ stats.write.accessCount=Ukupno upisano: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Zatvori
|
||||
main.minimizeBtn.tooltip=Minimiziraj
|
||||
main.preferencesBtn.tooltip=Postavke
|
||||
main.debugModeEnabled.tooltip=Omogućen je mod otklanjanja pogrešaka
|
||||
main.supporterCertificateMissing.tooltip=Molimo razmislite o doniranju
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Kliknite ovdje da dodate sef
|
||||
main.vaultlist.contextMenu.remove=Ukloni…
|
||||
@@ -217,6 +217,7 @@ main.vaultlist.contextMenu.unlock=Otključaj…
|
||||
main.vaultlist.contextMenu.unlockNow=Otključaj sada
|
||||
main.vaultlist.contextMenu.vaultoptions=Pokaži opcije sefa
|
||||
main.vaultlist.contextMenu.reveal=Otkrij pogon
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Hvala što ste izabrali Cryptomator za zaštitu podataka. Ako vam je potrebna pomoć, pogledajte naše vodiče za početak:
|
||||
@@ -314,4 +315,8 @@ quit.lockAndQuitBtn=Zaključaj i zatvori
|
||||
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
# 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,19 +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.occupiedMsg=El nom ja està en ús
|
||||
hub.register.registerBtn=Confirma
|
||||
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=Unitat anomenada
|
||||
hub.registerSuccess.description=Per a accedir a la caixa forta, el vostre dispositiu ha de ser autoritzat pel propietari de la caixa.
|
||||
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=Error al nombrar el dispositiu
|
||||
hub.registerFailed.description=S'ha produït un error en el procés de nomenament. Per més detalls vegeu el registre de l'aplicació.
|
||||
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,13 +299,14 @@ preferences.interface.language.auto=Valor predeterminat del sistema
|
||||
preferences.interface.interfaceOrientation=Orientació de la interfície
|
||||
preferences.interface.interfaceOrientation.ltr=Esquerra a dreta
|
||||
preferences.interface.interfaceOrientation.rtl=Dreta a esquerra
|
||||
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
|
||||
@@ -303,12 +319,16 @@ 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
|
||||
preferences.contribute.noCertificate=Doneu suport a Cryptomator i rebeu un certificat de col·laborador. És com una clau de llicència però per a gent meravellosa que fa servir programari lliure. ;-)
|
||||
preferences.contribute.getCertificate=Encara no en teniu cap? Sapigueu com aconseguir-ne un.
|
||||
preferences.contribute.promptText=Enganxeu aquí el certificat de col·laborador
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.confirmBtn=Elimina
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -350,11 +370,6 @@ stats.access.total=Total d'accessos: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Tanca
|
||||
main.minimizeBtn.tooltip=Minimitza
|
||||
main.preferencesBtn.tooltip=Preferències
|
||||
main.debugModeEnabled.tooltip=Mode depuració activat
|
||||
main.supporterCertificateMissing.tooltip=Si us plau, considereu fer una donació
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Feu clic aquí per afegir una caixa forta
|
||||
main.vaultlist.contextMenu.remove=Elimina…
|
||||
@@ -363,9 +378,7 @@ main.vaultlist.contextMenu.unlock=Desbloca…
|
||||
main.vaultlist.contextMenu.unlockNow=Desbloqueja ara
|
||||
main.vaultlist.contextMenu.vaultoptions=Opcions de la caixa forta
|
||||
main.vaultlist.contextMenu.reveal=Mostra la unitat
|
||||
main.vaultlist.addVaultBtn=Afegir
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Nova caixa forta...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Caixa forta existent...
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Gràcies per escollir Cryptomator per protegir els vostres fitxers. Si vos cal ajuda, llegiu les nostres guies per donar els Primers passos:
|
||||
@@ -375,6 +388,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í:
|
||||
@@ -429,6 +443,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
|
||||
@@ -438,6 +453,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
|
||||
@@ -507,4 +526,27 @@ updateReminder.message=Comprova si hi ha actualitzacions?
|
||||
updateReminder.description=Per estar actualitzat amb funcions noves, correccions d'errors i millores de seguretat recomanem comprovar les actualitzacions automàticament.
|
||||
updateReminder.notNow=Ara no
|
||||
updateReminder.yesOnce=Sí, una vegada
|
||||
updateReminder.yesAutomatically=Sí, automàticament
|
||||
updateReminder.yesAutomatically=Sí, automàticament
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Obrir les Preferències
|
||||
|
||||
# Share Vault
|
||||
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
|
||||
@@ -23,6 +23,8 @@ error.technicalDetails=Podrobnosti:
|
||||
error.existingSolutionDescription=Cryptomator neočekával, že se tak stane. Našli jsme však existující řešení pro tuto chybu. Podívejte se prosím na následující odkaz.
|
||||
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
|
||||
@@ -39,11 +41,13 @@ traymenu.vault.reveal=Zobrazit
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Přidat trezor
|
||||
## New
|
||||
addvaultwizard.new.title=Přidat nový trezor
|
||||
### Name
|
||||
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í
|
||||
@@ -88,6 +92,7 @@ addvault.new.readme.accessLocation.2=Toto je místo přístupu vašeho trezoru.
|
||||
addvault.new.readme.accessLocation.3=Všechny soubory přidané do tohoto svazku budou šifrovány Cryptomatorem. Můžete na něm pracovat na jiném disku/složce. Toto je pouze dešifrovaný pohled na jeho obsah, vaše soubory zůstávají na pevném disku stále zašifrovány.
|
||||
addvault.new.readme.accessLocation.4=Tento soubor můžete odstranit.
|
||||
## Existing
|
||||
addvaultwizard.existing.title=Přidat existující trezor
|
||||
addvaultwizard.existing.instruction=Vyberte soubor "vault.cryptomator" z existujícího trezoru. Pokud existuje pouze soubor s názvem "masterkey.cryptomator", vyberte jej.
|
||||
addvaultwizard.existing.chooseBtn=Vybrat...
|
||||
addvaultwizard.existing.filePickerTitle=Vyberte soubor trezoru
|
||||
@@ -132,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í…
|
||||
@@ -141,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.occupiedMsg=Jméno je již používáno
|
||||
hub.register.registerBtn=Potvrdit
|
||||
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=Jméno zařízení
|
||||
hub.registerSuccess.description=Pro přístup k trezoru musí být vaše zařízení autorizováno majitelem trezoru.
|
||||
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=Pojmenování zařízení se nezdařilo
|
||||
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á
|
||||
|
||||
@@ -233,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í…
|
||||
@@ -248,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
|
||||
@@ -264,11 +289,15 @@ preferences.interface.language.auto=Podle systému
|
||||
preferences.interface.interfaceOrientation=Orientace
|
||||
preferences.interface.interfaceOrientation.ltr=Zleva doprava
|
||||
preferences.interface.interfaceOrientation.rtl=Zprava doleva
|
||||
preferences.interface.showMinimizeButton=Zobrazit tlačítko minimalizovat
|
||||
preferences.interface.showTrayIcon=Zobrazit ikonu v liště (vyžaduje restart)
|
||||
## Volume
|
||||
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
|
||||
@@ -277,12 +306,16 @@ 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
|
||||
preferences.contribute.noCertificate=Podpořte Cryptomator a získejte certifikát podporovatele. Je to jako licenční klíč, ale pro skvělé lidi, kteří používají svobodný software. ;-)
|
||||
preferences.contribute.getCertificate=Ještě žádný nemáte? Naučte se, jak ho můžete získat.
|
||||
preferences.contribute.promptText=Sem vložte kód certifikátu podporovatele
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.confirmBtn=Odstranit
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -324,11 +357,6 @@ stats.access.total=Přístup celkem: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Zavřít
|
||||
main.minimizeBtn.tooltip=Minimalizovat
|
||||
main.preferencesBtn.tooltip=Nastavení
|
||||
main.debugModeEnabled.tooltip=Režim ladění je povolen
|
||||
main.supporterCertificateMissing.tooltip=Prosím, zvažte darování
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Klikněte zde pro přidání nového trezoru
|
||||
main.vaultlist.contextMenu.remove=Odstranit…
|
||||
@@ -337,7 +365,7 @@ main.vaultlist.contextMenu.unlock=Odemknout…
|
||||
main.vaultlist.contextMenu.unlockNow=Odemknout nyní
|
||||
main.vaultlist.contextMenu.vaultoptions=Zobrazit možnosti trezoru
|
||||
main.vaultlist.contextMenu.reveal=Zobrazit jednotku
|
||||
main.vaultlist.addVaultBtn=Přidat
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Děkujeme, že jste si vybrali Cryptomator pro ochranu vašich souborů. Pokud potřebujete pomoc, podívejte se na naše návody:
|
||||
@@ -347,6 +375,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ý:
|
||||
@@ -360,7 +389,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
|
||||
@@ -405,8 +436,12 @@ 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
|
||||
vaultOptions.masterkey=Heslo
|
||||
vaultOptions.masterkey.changePasswordBtn=Změnit heslo
|
||||
@@ -429,14 +464,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
|
||||
@@ -465,4 +509,28 @@ updateReminder.message=Zkontrolovat aktualizace?
|
||||
updateReminder.description=Získejte aktuální informace o nových funkcích, opravách chyb a vylepšeních zabezpečení. Doporučujeme automaticky kontrolovat aktualizace.
|
||||
updateReminder.notNow=Nyní ne
|
||||
updateReminder.yesOnce=Ano, jednou
|
||||
updateReminder.yesAutomatically=Ano, automaticky
|
||||
updateReminder.yesAutomatically=Ano, automaticky
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.title=Oznámení o zastaralosti
|
||||
dokanySupportEnd.message=Konec podpory pro Dokany
|
||||
dokanySupportEnd.preferencesBtn=Otevřít předvolby
|
||||
|
||||
# Share Vault
|
||||
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,19 +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.occupiedMsg=Navnet er allerede i brug
|
||||
hub.register.registerBtn=Bekræft
|
||||
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 navngivet
|
||||
hub.registerSuccess.description=For at tilgå boksen, skal din enhed godkendes af boks-ejeren.
|
||||
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=Navngivning af enhed mislykkedes
|
||||
hub.registerFailed.description=Der opstod en fejl i navngivnings-processen. Kig i applikations-loggen for flere detaljer.
|
||||
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,13 +299,14 @@ preferences.interface.language.auto=System standard
|
||||
preferences.interface.interfaceOrientation=Brugerflade retning
|
||||
preferences.interface.interfaceOrientation.ltr=Venstre til højre
|
||||
preferences.interface.interfaceOrientation.rtl=Højre til venstre
|
||||
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
|
||||
@@ -303,12 +319,16 @@ 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
|
||||
preferences.contribute.noCertificate=Hjælp Cryptomator, og modtag et supporter-certifikat. Det er ligesom en license-nøgle, men til fantastiske mennesker som bruger fri software. ;-)
|
||||
preferences.contribute.getCertificate=Har du ikke et allerede? Se her hvordan du kan få et.
|
||||
preferences.contribute.promptText=Indsæt koden for supporter-certifikatet her
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.confirmBtn=Fjern
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -350,11 +370,6 @@ stats.access.total=Samlede adgang: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Luk
|
||||
main.minimizeBtn.tooltip=Minimér
|
||||
main.preferencesBtn.tooltip=Præferencer
|
||||
main.debugModeEnabled.tooltip=Fejlfindingstilstand er aktiveret
|
||||
main.supporterCertificateMissing.tooltip=Overvej venligst at donere
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Klik her for at tilføje en boks
|
||||
main.vaultlist.contextMenu.remove=Fjern…
|
||||
@@ -363,9 +378,7 @@ main.vaultlist.contextMenu.unlock=Lås op…
|
||||
main.vaultlist.contextMenu.unlockNow=Lås op nu
|
||||
main.vaultlist.contextMenu.vaultoptions=Vis boksindstillinger
|
||||
main.vaultlist.contextMenu.reveal=Vis drev
|
||||
main.vaultlist.addVaultBtn=Tilføj
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Ny Boks...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Eksisterende Boks...
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Tak fordi du valgte Cryptomator til at beskytte dine filer. Hvis du har brug for hjælp, så tjek vores guider for at komme i gang:
|
||||
@@ -375,6 +388,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:
|
||||
@@ -429,6 +443,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
|
||||
@@ -438,6 +453,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
|
||||
@@ -507,4 +526,27 @@ updateReminder.message=Tjek for opdateringer?
|
||||
updateReminder.description=Hold dig opdateret med nye funktioner, fejlrettelser og sikkerhedsforbedringer. Vi anbefaler automatisk at søge efter opdateringer.
|
||||
updateReminder.notNow=Ikke nu
|
||||
updateReminder.yesOnce=Ja, én gang
|
||||
updateReminder.yesAutomatically=Ja, automatisk
|
||||
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,6 +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=Lokales Dateisystem wird auf Standard-Cloud-Verzeichnisse überprüft …
|
||||
addvaultwizard.new.locationLabel=Speicherort
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Eigener Ort
|
||||
@@ -135,14 +136,14 @@ unlock.success.revealBtn=Laufwerk anzeigen
|
||||
## Failure
|
||||
unlock.error.customPath.message=Tresor kann nicht in benutzerdefinierten Pfad eingehängt werden
|
||||
unlock.error.customPath.description.notSupported=Wenn du weiterhin den benutzerdefinierten Pfad verwenden möchtest, öffne die allgemeinen Einstellungen und wähle einen unterstützten Laufwerkstyp. Andernfalls gehe zu den Tresor-Optionen und wähle einen unterstützten Einhängepunkt.
|
||||
unlock.error.customPath.description.notExists=Der benutzerdefinierte Einhängepunkt existiert nicht. Erstelle ihn in deinem lokalen Dateisystem oder ändere ihn in den Tresor-Optionen.
|
||||
unlock.error.customPath.description.notExists=Der benutzerdefinierte Einhängepfad existiert nicht. Erstelle ihn entweder in deinem lokalen Dateisystem oder ändere ihn in den Tresor-Optionen.
|
||||
unlock.error.customPath.description.inUse=Der Laufwerksbuchstabe oder benutzerdefinierte Einhängepunkt „%s“ wird bereits verwendet.
|
||||
unlock.error.customPath.description.hideawayNotDir=Die temporäre, versteckte Datei „%3$s“, die für das Entsperren verwendet wurde, konnte nicht entfernt werden. Bitte überprüfe die Datei und lösche sie manuell.
|
||||
unlock.error.customPath.description.couldNotBeCleaned=Dein Tresor konnte nicht in den Pfad „%s“ eingehängt werden. Bitte versuche es erneut oder wähle einen anderen Pfad aus.
|
||||
unlock.error.customPath.description.notEmptyDir=Der benutzerdefinierte Einhängepunkt „%s“ ist kein leerer Ordner. Bitte wähle einen leeren Ordner und versuche es erneut.
|
||||
unlock.error.customPath.description.generic=Du hast für diesen Tresor einen benutzerdefinierten Einhängepunkt ausgewählt, aber dessen Verwendung ist mit folgender Meldung fehlgeschlagen: %2$s
|
||||
unlock.error.fuseRestartRequired.message=Tresor konnte nicht entsperrt werden
|
||||
unlock.error.fuseRestartRequired.description=Ändere den Laufwerkstyp in den Tresoroptionen oder starte Cryptomator neu.
|
||||
unlock.error.restartRequired.message=Tresor konnte nicht entsperrt werden
|
||||
unlock.error.restartRequired.description=Ändere den Laufwerkstyp in den Tresoroptionen oder starte Cryptomator neu.
|
||||
unlock.error.title=„%s“ konnte nicht entsperrt werden
|
||||
## Hub
|
||||
hub.noKeychain.message=Zugriff auf Geräteschlüssel nicht möglich
|
||||
@@ -157,17 +158,22 @@ hub.receive.message=Antwort wird verarbeitet …
|
||||
hub.receive.description=Cryptomator empfängt und verarbeitet gerade die Antwort vom Hub. Bitte warten.
|
||||
### Register Device
|
||||
hub.register.message=Neues Gerät
|
||||
hub.register.description=Dies ist der erste Hub-Zugriff von diesem Gerät. Bitte autorisiere dich mit deinem Account Key.
|
||||
hub.register.description=Dies ist der erste Hub-Zugriff von diesem Gerät. Bitte registriere es mit deinem Account Key.
|
||||
hub.register.nameLabel=Gerätename
|
||||
hub.register.invalidAccountKeyLabel=Ungültiger Account Key
|
||||
hub.register.occupiedMsg=Name bereits in Verwendung
|
||||
hub.register.registerBtn=Bestätigen
|
||||
hub.register.registerBtn=Registrieren
|
||||
### Register Device Legacy
|
||||
hub.register.legacy.occupiedMsg=Name wird bereits verwendet
|
||||
hub.register.legacy.description=Dies ist der erste Hub-Zugriff von diesem Gerät. Bitte registriere es.
|
||||
### Registration Success
|
||||
hub.registerSuccess.message=Gerät wurde benannt
|
||||
hub.registerSuccess.description=Für Zugriff auf den Tresor muss dein Gerät vom Tresorbesitzer autorisiert werden.
|
||||
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=Für den Zugriff auf den Tresor muss dein Gerät zusätzlich vom Tresoreigentümer autorisiert werden.
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=Gerät konnte kein Name gegeben werden
|
||||
hub.registerFailed.description=Während der Namensvergabe wurde ein Fehler ausgelöst. Weitere Details findest du im Anwendungsprotokoll.
|
||||
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
|
||||
hub.unauthorized.message=Zugriff verweigert
|
||||
hub.unauthorized.description=Dein Gerät wurde noch nicht für den Zugriff auf diesen Tresor autorisiert. Bitte den Tresorbesitzer, dein Gerät zu autorisieren.
|
||||
@@ -281,6 +287,7 @@ preferences.general.debugLogging=Diagnoseprotokoll aktivieren
|
||||
preferences.general.debugDirectory=Protokolldateien anzeigen
|
||||
preferences.general.autoStart=Cryptomator beim Systemstart starten
|
||||
preferences.general.keychainBackend=Passwörter speichern mit
|
||||
preferences.general.quickAccessService=Die entsperrten Tresore zum Schnellzugriff hinzufügen
|
||||
## Interface
|
||||
preferences.interface=Benutzeroberfläche
|
||||
preferences.interface.theme=Erscheinungsbild
|
||||
@@ -293,8 +300,8 @@ preferences.interface.language.auto=Systemvorgabe
|
||||
preferences.interface.interfaceOrientation=Oberflächenausrichtung
|
||||
preferences.interface.interfaceOrientation.ltr=Von links nach rechts
|
||||
preferences.interface.interfaceOrientation.rtl=Von rechts nach links
|
||||
preferences.interface.showMinimizeButton=Schaltfläche zum Minimieren anzeigen
|
||||
preferences.interface.showTrayIcon=Symbol im Infobereich anzeigen (Neustart erforderlich)
|
||||
preferences.interface.compactMode=Kompakte Tresoransicht einschalten
|
||||
## Volume
|
||||
preferences.volume=Virtuelles Laufwerk
|
||||
preferences.volume.type=Standard-Laufwerkstyp
|
||||
@@ -314,12 +321,29 @@ 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
|
||||
preferences.contribute.noCertificate=Unterstütze Cryptomator und erhalte ein Supporter-Zertifikat. Es ist eine Art Lizenzschlüssel, aber für großartige Menschen, die freie Software verwenden. ;-)
|
||||
preferences.contribute.getCertificate=Du hast noch keines? Erfahre, wie du es erhalten kannst.
|
||||
preferences.contribute.promptText=Füge hier den Code des Supporter-Zertifikats ein
|
||||
preferences.contribute.thankYou=Danke, dass Du die Open-Source-Entwicklung von Cryptomator unterstützt!
|
||||
preferences.contribute.donate=Spenden
|
||||
preferences.contribute.sponsor=Sponsern
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.title=Zertifikat entfernen
|
||||
removeCert.message=Supporter-Zertifikat entfernen?
|
||||
removeCert.description=Die Kernfunktionen von Cryptomator sind davon nicht betroffen. Weder der Zugriff auf deine Tresore ist eingeschränkt, noch wird das Sicherheitsniveau verringert.
|
||||
removeCert.confirmBtn=Entfernen
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -361,11 +385,6 @@ stats.access.total=Gesamtzugriffe: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Schließen
|
||||
main.minimizeBtn.tooltip=Minimieren
|
||||
main.preferencesBtn.tooltip=Einstellungen
|
||||
main.debugModeEnabled.tooltip=Diagnosemodus ist aktiviert
|
||||
main.supporterCertificateMissing.tooltip=Zieh bitte eine Spende in Betracht
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Klicke hier, um einen Tresor hinzuzufügen
|
||||
main.vaultlist.contextMenu.remove=Entfernen …
|
||||
@@ -374,9 +393,11 @@ main.vaultlist.contextMenu.unlock=Entsperren …
|
||||
main.vaultlist.contextMenu.unlockNow=Jetzt entsperren
|
||||
main.vaultlist.contextMenu.vaultoptions=Tresoroptionen anzeigen
|
||||
main.vaultlist.contextMenu.reveal=Laufwerk anzeigen
|
||||
main.vaultlist.addVaultBtn=Hinzufügen
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Neuer Tresor …
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Bestehender Tresor …
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Neuen Tresor erstellen...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Bestehenden Tresor öffnen...
|
||||
##Notificaition
|
||||
main.notification.updateAvailable=Eine neue Version ist verfügbar.
|
||||
main.notification.support=Unterstütze Cryptomator.
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Danke, dass du zum Schutz deiner Dateien Cryptomator gewählt hast. Falls du Hilfe brauchst, schau dir unsere Anleitungen an:
|
||||
@@ -386,6 +407,7 @@ main.vaultDetail.unlockBtn=Entsperren …
|
||||
main.vaultDetail.unlockNowBtn=Jetzt entsperren
|
||||
main.vaultDetail.optionsBtn=Tresoroptionen
|
||||
main.vaultDetail.passwordSavedInKeychain=Passwort gespeichert
|
||||
main.vaultDetail.share=Teilen …
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=ENTSPERRT
|
||||
main.vaultDetail.accessLocation=Deine Tresorinhalte sind hier erreichbar:
|
||||
@@ -451,7 +473,7 @@ vaultOptions.mount.mountPoint.custom=Gewähltes Verzeichnis verwenden
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Durchsuchen …
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Wähle ein Verzeichnis
|
||||
vaultOptions.mount.volumeType.default=Standard (%s)
|
||||
vaultOptions.mount.volumeType.fuseRestartRequired=Um diesen Laufwerkstyp verwenden zu können, muss Cryptomator neu gestartet werden.
|
||||
vaultOptions.mount.volumeType.restartRequired=Um diesen Laufwerkstyp verwenden zu können, muss Cryptomator neu gestartet werden.
|
||||
vaultOptions.mount.volume.tcp.port=TCP-Port
|
||||
vaultOptions.mount.volume.type=Laufwerkstyp
|
||||
## Master Key
|
||||
@@ -523,4 +545,30 @@ updateReminder.message=Nach Updates suchen?
|
||||
updateReminder.description=Bleib auf dem Laufenden mit neuen Funktionen, Fehlerbehebungen und Sicherheitsverbesserungen. Wir empfehlen, automatisch nach Updates zu suchen.
|
||||
updateReminder.notNow=Nicht jetzt
|
||||
updateReminder.yesOnce=Ja, einmalig
|
||||
updateReminder.yesAutomatically=Ja, automatisch
|
||||
updateReminder.yesAutomatically=Ja, automatisch
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.title=Hinweis: nicht mehr verwendet
|
||||
dokanySupportEnd.message=Ende der Unterstützung für Dokany
|
||||
dokanySupportEnd.description=Der Laufwerkstyp Dokany wird von Cryptomator nicht weiter unterstützt. Deine Einstellungen wurden angepasst, dass der Standard-Laufwerkstyp verwendet wird. Du kannst den Standardtyp in den Einstellungen anzeigen lassen.
|
||||
dokanySupportEnd.preferencesBtn=Einstellungen öffnen
|
||||
|
||||
# Share Vault
|
||||
shareVault.title=Tresor teilen
|
||||
shareVault.message=Möchtest du deinen Tresor mit anderen teilen?
|
||||
shareVault.description=Sei immer vorsichtig, wenn du deinen Tresor mit anderen Personen teilst. Kurz gesagt, befolge diese Schritte:
|
||||
shareVault.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=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=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=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
|
||||
@@ -47,6 +47,7 @@ addvaultwizard.new.nameInstruction=Διαλέξτε ένα όνομα για τ
|
||||
addvaultwizard.new.namePrompt=Όνομα Κρύπτης
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Που θα πρέπει να αποθηκεύσει το Cryptomator τα κωδικοποιημένα αρχεία της κρύπτης σου;
|
||||
addvaultwizard.new.locationLoading=Έλεγχος τοπικού συστήματος αρχείων για προεπιλεγμένους καταλόγους αποθήκευσης cloud…
|
||||
addvaultwizard.new.locationLabel=Θέση αποθήκευσης
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Προσαρμοσμένη τοποθεσία
|
||||
@@ -141,8 +142,8 @@ 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.fuseRestartRequired.message=Αδυναμία ξεκλειδώματος κρύπτης
|
||||
unlock.error.fuseRestartRequired.description=Αλλάξτε τον τύπο τόμου στις επιλογές κρύπτης ή επανεκκινήστε το Cryptomator.
|
||||
unlock.error.restartRequired.message=Αδυναμία ξεκλειδώματος κρύπτης
|
||||
unlock.error.restartRequired.description=Αλλάξτε τον τύπο τόμου στις επιλογές κρύπτης ή επανεκκινήστε το Cryptomator.
|
||||
unlock.error.title=Ξεκλείδωμα "%s" απέτυχε
|
||||
## Hub
|
||||
hub.noKeychain.message=Δεν είναι δυνατή η πρόσβαση στο κλειδί της συσκευής
|
||||
@@ -157,17 +158,22 @@ hub.receive.message=Επεξεργασία απάντησης…
|
||||
hub.receive.description=Το Cryptomator λαμβάνει και επεξεργάζεται την απάντηση από το Hub. Παρακαλώ περιμένετε.
|
||||
### Register Device
|
||||
hub.register.message=Νέα Συσκευή
|
||||
hub.register.description=Αυτή είναι η πρώτη πρόσβαση Hub από αυτήν τη συσκευή. Παρακαλούμε εξουσιοδοτήστε την χρησιμοποιώντας το κλειδί του λογαριασμού σας.
|
||||
hub.register.description=Αυτή είναι η πρώτη πρόσβαση Hub από αυτήν τη συσκευή. Εγγραφείτε χρησιμοποιώντας το Κλειδί του Λογαριασμού σας.
|
||||
hub.register.nameLabel=Όνομα Συσκευής
|
||||
hub.register.invalidAccountKeyLabel=Μη Έγκυρο Κλειδί Λογαριασμού
|
||||
hub.register.occupiedMsg=Το όνομα χρησιμοποιείται ήδη
|
||||
hub.register.registerBtn=Επιβεβαίωση
|
||||
hub.register.registerBtn=Εγγραφή
|
||||
### Register Device Legacy
|
||||
hub.register.legacy.occupiedMsg=Το όνομα χρησιμοποιείται ήδη
|
||||
hub.register.legacy.description=Αυτή είναι η πρώτη πρόσβαση Hub από αυτήν τη συσκευή. Παρακαλούμε καταχωρήστε τη.
|
||||
### Registration Success
|
||||
hub.registerSuccess.message=Η συσκευή ονομάστηκε
|
||||
hub.registerSuccess.description=Για να αποκτήσετε πρόσβαση στην κρύπτη, η συσκευή σας πρέπει να είναι εξουσιοδοτημένη από τον κάτοχο της κρύπτης.
|
||||
hub.registerSuccess.message=Η συσκευή καταχωρήθηκε
|
||||
hub.registerSuccess.description=Η συσκευή σας καταχωρήθηκε με επιτυχία. Τώρα μπορείτε να συνεχίσετε να ξεκλειδώσετε την κρύπτη.
|
||||
hub.registerSuccess.unlockBtn=Ξεκλείδωμα
|
||||
hub.registerSuccess.legacy.description=Για να αποκτήσετε πρόσβαση στην κρύπτη, η συσκευή σας πρέπει να έχει επιπλέον εξουσιοδότηση από τον κάτοχο της κρύπτης.
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=Η ονομασία της συσκευής απέτυχε
|
||||
hub.registerFailed.description=Παρουσιάστηκε σφάλμα στη διαδικασία ονομασίας. Για περισσότερες λεπτομέρειες, ανατρέξτε στο αρχείο καταγραφής της εφαρμογής.
|
||||
hub.registerFailed.message=Η εγγραφή της συσκευής απέτυχε
|
||||
hub.registerFailed.description.generic=Παρουσιάστηκε σφάλμα στη διαδικασία εγγραφής. Για περισσότερες λεπτομέρειες, ανατρέξτε στο αρχείο καταγραφής της εφαρμογής.
|
||||
hub.registerFailed.description.deviceAlreadyExists=Αυτή η συσκευή είναι ήδη εγγεγραμμένη για διαφορετικό χρήστη. Προσπαθήστε να αλλάξετε τον λογαριασμό χρήστη ή να χρησιμοποιήσετε διαφορετική συσκευή.
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=Δεν επιτρέπεται η πρόσβαση
|
||||
hub.unauthorized.description=Η συσκευή σας δεν έχει ακόμη εξουσιοδοτηθεί να έχει πρόσβαση σε αυτή την κρύπτη. Ζητήστε από τον κάτοχο της κρύπτης να την εξουσιοδοτήσει.
|
||||
@@ -281,6 +287,7 @@ preferences.general.debugLogging=Ενεργοποίηση καταγραφής
|
||||
preferences.general.debugDirectory=Αποκάλυψη αρχείων καταγραφής
|
||||
preferences.general.autoStart=Εκκίνηση Cryptomator στην εκκίνηση του συστήματος
|
||||
preferences.general.keychainBackend=Αποθήκευση κωδικού πρόσβασης με
|
||||
preferences.general.quickAccessService=Προσθήκη ξεκλειδωμένων Κρυπτών στην περιοχή γρήγορης πρόσβασης
|
||||
## Interface
|
||||
preferences.interface=Διεπαφή
|
||||
preferences.interface.theme=Εμφάνιση & Αίσθηση
|
||||
@@ -293,8 +300,8 @@ preferences.interface.language.auto=Προεπιλογή Συστήματος
|
||||
preferences.interface.interfaceOrientation=Προσανατολισμός Διεπαφής
|
||||
preferences.interface.interfaceOrientation.ltr=Αριστερά προς Δεξιά
|
||||
preferences.interface.interfaceOrientation.rtl=Δεξιά προς Αριστερά
|
||||
preferences.interface.showMinimizeButton=Εμφάνιση κουμπιού ελαχιστοποίησης
|
||||
preferences.interface.showTrayIcon=Εμφάνιση εικονιδίου tray (απαιτεί επανεκκίνηση)
|
||||
preferences.interface.compactMode=Ενεργοποίηση συμπαγούς λίστας κρυπτών
|
||||
## Volume
|
||||
preferences.volume=Εικονικός δίσκος
|
||||
preferences.volume.type=Προεπιλεγμένος Τύπος Τόμου
|
||||
@@ -314,12 +321,29 @@ 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
|
||||
preferences.contribute.noCertificate=Υποστηρίξτε το Cryptomator και λάβετε ένα πιστοποιητικό υποστηρικτή. Είναι σαν κλειδί άδειας χρήσης, αλλά για φοβερά άτομα που χρησιμοποιούν ελεύθερο λογισμικό. ;-)
|
||||
preferences.contribute.getCertificate=Δεν έχετε ένα ήδη; Μάθετε πώς μπορείτε να το αποκτήσετε.
|
||||
preferences.contribute.promptText=Επικολλήστε τον κωδικό πιστοποιητικού υποστηρικτή εδώ
|
||||
preferences.contribute.thankYou=Σας ευχαριστούμε που υποστηρίζετε την ανάπτυξη ανοιχτού κώδικα του Cryptomator!
|
||||
preferences.contribute.donate=Δωρεά
|
||||
preferences.contribute.sponsor=Χορηγός
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.title=Αφαίρεση Πιστοποιητικού
|
||||
removeCert.message=Αφαίρεση πιστοποιητικού υποστηρικτή;
|
||||
removeCert.description=Οι βασικές λειτουργίες του Cryptomator δεν επηρεάζονται από αυτό. Ούτε η πρόσβαση στις κρύπτες σας είναι περιορισμένη ούτε το επίπεδο ασφάλειας μειώνεται.
|
||||
removeCert.confirmBtn=Αφαίρεση
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -361,11 +385,6 @@ stats.access.total=Συνολική πρόσβαση: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Κλείσιμο
|
||||
main.minimizeBtn.tooltip=Ελαχιστοποίηση
|
||||
main.preferencesBtn.tooltip=Προτιμήσεις
|
||||
main.debugModeEnabled.tooltip=Έχει ενεργοποιηθεί η λειτουργία αποσφαλμάτωσης
|
||||
main.supporterCertificateMissing.tooltip=Παρακαλούμε σκεφτείτε να κάνετε δωρεά
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Κάντε κλικ εδώ για να προσθέσετε ένα vault
|
||||
main.vaultlist.contextMenu.remove=Αφαίρεση…
|
||||
@@ -374,9 +393,11 @@ main.vaultlist.contextMenu.unlock=Ξεκλείδωμα…
|
||||
main.vaultlist.contextMenu.unlockNow=Ξεκλείδωμα τώρα
|
||||
main.vaultlist.contextMenu.vaultoptions=Εμφάνιση επιλογών Vault
|
||||
main.vaultlist.contextMenu.reveal=Αποκάλυψη εικονικού δίσκου
|
||||
main.vaultlist.addVaultBtn=Προσθήκη
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Νέα Κρύπτη...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Υπάρχουσα Κρύπτη...
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Δημιουργία Νέας Κρύπτης...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Άνοιγμα Υπάρχοντος Κρύπτης...
|
||||
##Notificaition
|
||||
main.notification.updateAvailable=Η ενημέρωση είναι διαθέσιμη.
|
||||
main.notification.support=Υποστήριξη Cryptomator.
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Ευχαριστούμε που επιλέξατε το Cryptomator για να προστατεύσετε τα αρχεία σας. Αν χρειάζεστε οποιαδήποτε βοήθεια, ελέγξτε τους οδηγούς για αρχάριους:
|
||||
@@ -386,6 +407,7 @@ main.vaultDetail.unlockBtn=Ξεκλείδωμα…
|
||||
main.vaultDetail.unlockNowBtn=Ξεκλείδωμα τώρα
|
||||
main.vaultDetail.optionsBtn=Επιλογές vault
|
||||
main.vaultDetail.passwordSavedInKeychain=Ο κωδικός αποθηκεύτηκε
|
||||
main.vaultDetail.share=Κοινοποίηση…
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=ΞΕΚΛΕΙΔΩΜΕΝΟ
|
||||
main.vaultDetail.accessLocation=Τα δεδομένα του vault σας είναι διαθέσιμα εδώ:
|
||||
@@ -451,7 +473,7 @@ vaultOptions.mount.mountPoint.custom=Χρήση επιλεγμένου κατα
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Επιλογή…
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Επιλέξτε έναν κατάλογο
|
||||
vaultOptions.mount.volumeType.default=Προεπιλογή (%s)
|
||||
vaultOptions.mount.volumeType.fuseRestartRequired=Για να χρησιμοποιήσετε αυτόν τον τύπο τόμου, πρέπει να γίνει επανεκκίνηση του Cryptomator.
|
||||
vaultOptions.mount.volumeType.restartRequired=Για να χρησιμοποιήσετε αυτόν τον τύπο τόμου, το Cryptomator πρέπει να επανεκκινηθεί.
|
||||
vaultOptions.mount.volume.tcp.port=Θύρα TCP
|
||||
vaultOptions.mount.volume.type=Τύπος Τόμου
|
||||
## Master Key
|
||||
@@ -523,4 +545,30 @@ updateReminder.message=Έλεγχος για ενημερώσεις;
|
||||
updateReminder.description=Μείνετε ενημερωμένοι με νέες δυνατότητες, διορθώσεις σφαλμάτων και βελτιώσεις ασφάλειας. Συνιστούμε τον αυτόματο έλεγχο για ενημερώσεις.
|
||||
updateReminder.notNow=Όχι Τώρα
|
||||
updateReminder.yesOnce=Ναι, Μία Φορά
|
||||
updateReminder.yesAutomatically=Ναι, Αυτόματα
|
||||
updateReminder.yesAutomatically=Ναι, Αυτόματα
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.title=Ειδοποίηση κατάργησης
|
||||
dokanySupportEnd.message=Τέλος υποστήριξης για Dokany
|
||||
dokanySupportEnd.description=Ο τύπος τόμου Dokany δεν υποστηρίζεται πλέον από το Cryptomator. Οι ρυθμίσεις σας έχουν προσαρμοστεί για να χρησιμοποιούν τον προεπιλεγμένο τύπο τόμου. Μπορείτε να δείτε τον προεπιλεγμένο τύπο στις προτιμήσεις.
|
||||
dokanySupportEnd.preferencesBtn=Άνοιγμα Προτιμήσεων
|
||||
|
||||
# Share Vault
|
||||
shareVault.title=Κοινή χρήση Κρύπτης
|
||||
shareVault.message=Θα θέλατε να μοιραστείτε την κρύπτη σας με άλλους;
|
||||
shareVault.description=Να είστε πάντα προσεκτικοί όταν μοιράζεστε την κρύπτη σας με άλλα άτομα. Εν ολίγοις, ακολουθήστε τα παρακάτω βήματα:
|
||||
shareVault.instruction.1=1. Μοιραστείτε την πρόσβαση στον κρυπτογραφημένο φάκελο κρύπτης μέσω του χώρου αποθήκευσης στο cloud.
|
||||
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=Πώς να μοιραστείτε μια κρύπτη Hub
|
||||
shareVault.hub.description=Για να μοιραστείτε το περιεχόμενο της κρύπτης με άλλο μέλος της ομάδας, πρέπει να εκτελέσετε δύο βήματα:
|
||||
shareVault.hub.instruction.1=1. Μοιραστείτε την πρόσβαση στον κρυπτογραφημένο φάκελο κρύπτης μέσω του χώρου αποθήκευσης στο cloud.
|
||||
shareVault.hub.instruction.2=2. Παραχωρήστε πρόσβαση σε μέλος της ομάδας στο Cryptomator Hub.
|
||||
shareVault.hub.openHub=Ανοίξτε το Cryptomator Hub
|
||||
@@ -0,0 +1,198 @@
|
||||
# Locale Specific CSS files such as CJK, RTL,...
|
||||
|
||||
# Generics
|
||||
## Button
|
||||
generic.button.apply=Apply
|
||||
generic.button.back=Back
|
||||
generic.button.cancel=Cancel
|
||||
generic.button.change=Change
|
||||
generic.button.choose=Choose…
|
||||
generic.button.close=Close
|
||||
generic.button.done=Done
|
||||
generic.button.next=Next
|
||||
|
||||
# Error
|
||||
|
||||
# Defaults
|
||||
|
||||
# Tray Menu
|
||||
traymenu.showMainWindow=Show
|
||||
traymenu.showPreferencesWindow=Preferences
|
||||
traymenu.quitApplication=Quit
|
||||
traymenu.vault.unlock=Unlock
|
||||
traymenu.vault.lock=Lock
|
||||
traymenu.vault.reveal=Reveal
|
||||
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=Add Vault
|
||||
## New
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=Choose a name for the vault
|
||||
addvaultwizard.new.namePrompt=Vault Name
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Where should Cryptomator store the encrypted files of your vault?
|
||||
addvaultwizard.new.locationLabel=Storage location
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerButton=Choose…
|
||||
addvaultwizard.new.directoryPickerTitle=Select Directory
|
||||
### Expert Settings
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=Create Vault
|
||||
### Information
|
||||
## Existing
|
||||
addvaultwizard.existing.chooseBtn=Choose…
|
||||
## Success
|
||||
addvaultwizard.success.nextStepsInstructions=Added vault "%s".\nYou need to unlock this vault to access or add contents. Alternatively you can unlock it at any later point in time.
|
||||
addvaultwizard.success.unlockNow=Unlock Now
|
||||
|
||||
# Remove Vault
|
||||
removeVault.confirmBtn=Remove Vault
|
||||
|
||||
# Change Password
|
||||
changepassword.title=Change Password
|
||||
changepassword.enterOldPassword=Enter the current password for "%s"
|
||||
|
||||
# Forget Password
|
||||
forgetPassword.title=Forget Password
|
||||
forgetPassword.confirmBtn=Forget Password
|
||||
|
||||
# Unlock
|
||||
unlock.passwordPrompt=Enter password for "%s":
|
||||
unlock.unlockBtn=Unlock
|
||||
## Select
|
||||
unlock.chooseMasterkey.filePickerTitle=Select Masterkey File
|
||||
## Success
|
||||
unlock.success.revealBtn=Reveal Drive
|
||||
## Failure
|
||||
## Hub
|
||||
### Waiting
|
||||
### Receive Key
|
||||
### Register Device
|
||||
### Register Device Legacy
|
||||
### Registration Success
|
||||
hub.registerSuccess.unlockBtn=Unlock
|
||||
### Registration Failed
|
||||
### Unauthorized
|
||||
### Requires Account Initialization
|
||||
### License Exceeded
|
||||
|
||||
# Lock
|
||||
## Force
|
||||
## Failure
|
||||
|
||||
# Migration
|
||||
migration.title=Upgrade Vault
|
||||
## Start
|
||||
migration.start.header=Upgrade Vault
|
||||
## Run
|
||||
migration.run.enterPassword=Enter the password for "%s"
|
||||
migration.run.startMigrationBtn=Migrate Vault
|
||||
## Success
|
||||
migration.success.nextStepsInstructions=Migrated "%s" successfully.\nYou can now unlock your vault.
|
||||
migration.success.unlockNow=Unlock Now
|
||||
## Missing file system capabilities
|
||||
## Impossible
|
||||
|
||||
# Health Check
|
||||
## Start
|
||||
## Start Failure
|
||||
## Check Selection
|
||||
## Detail view
|
||||
## Result view
|
||||
## Fix Application
|
||||
|
||||
# Preferences
|
||||
preferences.title=Preferences
|
||||
## General
|
||||
preferences.general=General
|
||||
preferences.general.startHidden=Hide window when starting Cryptomator
|
||||
preferences.general.debugLogging=Enable debug logging
|
||||
## Interface
|
||||
## Volume
|
||||
preferences.volume=Virtual Drive
|
||||
## Updates
|
||||
preferences.updates=Updates
|
||||
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.
|
||||
|
||||
## Contribution
|
||||
|
||||
### Remove License Key Dialog
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
|
||||
# Vault Statistics
|
||||
## Read
|
||||
## Write
|
||||
|
||||
## Accesses
|
||||
|
||||
|
||||
# Main Window
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Click here to add a vault
|
||||
main.vaultlist.contextMenu.lock=Lock
|
||||
main.vaultlist.contextMenu.unlockNow=Unlock Now
|
||||
main.vaultlist.contextMenu.reveal=Reveal Drive
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
### Locked
|
||||
main.vaultDetail.lockedStatus=LOCKED
|
||||
main.vaultDetail.unlockNowBtn=Unlock Now
|
||||
main.vaultDetail.optionsBtn=Vault Options
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=UNLOCKED
|
||||
main.vaultDetail.accessLocation=Your vault's contents are accessible here:
|
||||
main.vaultDetail.revealBtn=Reveal Drive
|
||||
main.vaultDetail.lockBtn=Lock
|
||||
main.vaultDetail.throughput.idle=idle
|
||||
main.vaultDetail.throughput.mbps=%.1f MiB/s
|
||||
### Missing
|
||||
### Needs Migration
|
||||
main.vaultDetail.migrateButton=Upgrade Vault
|
||||
### Error
|
||||
|
||||
# Wrong File Alert
|
||||
|
||||
# Vault Options
|
||||
## General
|
||||
vaultOptions.general=General
|
||||
vaultOptions.general.vaultName=Vault Name
|
||||
vaultOptions.general.actionAfterUnlock.reveal=Reveal Drive
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=Mounting
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Choose…
|
||||
## Master Key
|
||||
vaultOptions.masterkey.changePasswordBtn=Change Password
|
||||
## Hub
|
||||
|
||||
# Recovery Key
|
||||
## Display Recovery Key
|
||||
## Reset Password
|
||||
### Enter Recovery Key
|
||||
### Reset Password
|
||||
### Recovery Key Password Reset Success
|
||||
|
||||
# Convert Vault
|
||||
|
||||
# New Password
|
||||
passwordStrength.messageLabel.0=Very weak
|
||||
passwordStrength.messageLabel.1=Weak
|
||||
passwordStrength.messageLabel.2=Fair
|
||||
passwordStrength.messageLabel.3=Strong
|
||||
passwordStrength.messageLabel.4=Very strong
|
||||
|
||||
# Quit
|
||||
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
@@ -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,8 +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.fuseRestartRequired.message=No se puede desbloquear la bóveda
|
||||
unlock.error.fuseRestartRequired.description=Cambie el tipo de volumen en las opciones de la bóveda o reinicie Cryptomator.
|
||||
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
|
||||
@@ -157,17 +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, autorícelo usando su Account Key.
|
||||
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.occupiedMsg=Nombre ya en uso
|
||||
hub.register.registerBtn=Confirmar
|
||||
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 nombrado
|
||||
hub.registerSuccess.description=Para acceder a la bóveda, su dispositivo debe ser autorizado por el propietario de la bóveda.
|
||||
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=Error al nombrar el dispositivo
|
||||
hub.registerFailed.description=Ocurrió un error en el nombramiento. Para más detalles consulte el registro de la aplicación.
|
||||
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.
|
||||
@@ -187,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
|
||||
@@ -281,6 +287,7 @@ preferences.general.debugLogging=Habilitar registro de depuración
|
||||
preferences.general.debugDirectory=Revelar archivos de registro
|
||||
preferences.general.autoStart=Cargar Cryptomator al iniciar el sistema
|
||||
preferences.general.keychainBackend=Guardar contraseñas con
|
||||
preferences.general.quickAccessService=Añadir bóvedas desbloqueadas al área de acceso rápido
|
||||
## Interface
|
||||
preferences.interface=Interfaz
|
||||
preferences.interface.theme=Apariencia
|
||||
@@ -293,8 +300,8 @@ preferences.interface.language.auto=Valores por defecto del sistema
|
||||
preferences.interface.interfaceOrientation=Orientación de la interfaz
|
||||
preferences.interface.interfaceOrientation.ltr=Izquierda a derecha
|
||||
preferences.interface.interfaceOrientation.rtl=Derecha a izquierda
|
||||
preferences.interface.showMinimizeButton=Mostrar botón minimizar
|
||||
preferences.interface.showTrayIcon=Mostrar ícono de bandeja (requiere reiniciar)
|
||||
preferences.interface.compactMode=Habilitar la lista de bóvedas compactas
|
||||
## Volume
|
||||
preferences.volume=Unidad virtual
|
||||
preferences.volume.type=Tipo de volumen predeterminado
|
||||
@@ -314,12 +321,29 @@ 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
|
||||
preferences.contribute.noCertificate=Apoye a Cryptomator y reciba un certificado de seguidor. Es como una clave de licencia, pero para gente asombrosa usando software libre. ;-)
|
||||
preferences.contribute.getCertificate=¿Aún no tiene uno? Aprenda cómo puede obtenerlo.
|
||||
preferences.contribute.promptText=Pegue aquí el código de certificado de seguidor
|
||||
preferences.contribute.thankYou=¡Gracias por apoyar el desarrollo de código abierto de Cryptomator!
|
||||
preferences.contribute.donate=Donar
|
||||
preferences.contribute.sponsor=Patrocinador
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.title=Eliminar Certificado
|
||||
removeCert.message=¿Eliminar certificado de soporte?
|
||||
removeCert.description=Las características principales de Cryptomator no se ven afectadas por esto. No se restringe el acceso a sus bóvedas ni se reduce el nivel de seguridad.
|
||||
removeCert.confirmBtn=Eliminar
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -361,11 +385,6 @@ stats.access.total=Accesos totales: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Cerrar
|
||||
main.minimizeBtn.tooltip=Minimizar
|
||||
main.preferencesBtn.tooltip=Preferencias
|
||||
main.debugModeEnabled.tooltip=Modo de depuración activado
|
||||
main.supporterCertificateMissing.tooltip=Por favor, considere donar
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Haga clic aquí para añadir una bóveda
|
||||
main.vaultlist.contextMenu.remove=Eliminar…
|
||||
@@ -374,9 +393,11 @@ main.vaultlist.contextMenu.unlock=Desbloquear…
|
||||
main.vaultlist.contextMenu.unlockNow=Desbloquear ahora
|
||||
main.vaultlist.contextMenu.vaultoptions=Mostrar opciones de la bóveda
|
||||
main.vaultlist.contextMenu.reveal=Revelar unidad
|
||||
main.vaultlist.addVaultBtn=Añadir
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Nueva bóveda...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Bóveda existente...
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Crear Bóveda Nueva...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Abrir Bóveda Existente...
|
||||
##Notificaition
|
||||
main.notification.updateAvailable=Existen actualizaciones disponibles.
|
||||
main.notification.support=Soporte de Cryptomator.
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Gracias por elegir Cryptomator para proteger sus archivos. En caso de necesitar ayuda, revise nuestras guías:
|
||||
@@ -386,6 +407,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í:
|
||||
@@ -451,7 +473,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.fuseRestartRequired=Para utilizar este tipo de volumen, debe reiniciarse Criptomator.
|
||||
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
|
||||
@@ -523,4 +545,30 @@ updateReminder.message=¿Buscar actualizaciones?
|
||||
updateReminder.description=Manténgase actualizado con funciones nuevas, correcciones de errores y mejoras de seguridad. Recomendamos comprobar actualizaciones automáticamente.
|
||||
updateReminder.notNow=Ahora no
|
||||
updateReminder.yesOnce=Sí, una vez
|
||||
updateReminder.yesAutomatically=Sí, automáticamente
|
||||
updateReminder.yesAutomatically=Sí, automáticamente
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.title=Aviso de obsolescencia
|
||||
dokanySupportEnd.message=Fin de soporte para Dokany
|
||||
dokanySupportEnd.description=El tipo de volumen Dokany ya no está soportado por Cryptomator. Su configuración se ajusta para utilizar el tipo de volumen predeterminado ahora. Puede ver el tipo predeterminado en las preferencias.
|
||||
dokanySupportEnd.preferencesBtn=Abrir preferencias
|
||||
|
||||
# Share Vault
|
||||
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
|
||||
@@ -16,13 +16,23 @@ generic.button.print=چاپ
|
||||
|
||||
# Error
|
||||
error.message=خطایی رخ داده است
|
||||
error.description=کریپتوماتور انتظار رخ دادن این مورد را نداشت. شما میتوانید به دنبال راهکار های موجود برای این خطا بگردید، یا اگر قبلا گزارش نشده است، گزارش کنید.
|
||||
error.hyperlink.lookup=جستجوی خطا
|
||||
error.hyperlink.report=گزارش خطا
|
||||
error.technicalDetails=جزئیات:
|
||||
error.existingSolutionDescription=کریپتوماتور انتظار رخ دادن این مورد را نداشت، اما ما راه حلی برای این خطا پیدا کردیم. لطفا نگاهی به لینک زیر بیندازید.
|
||||
error.hyperlink.solution=جستجوی راه حل
|
||||
error.lookupPermissionMessage=کریپتوماتور میتواند دنبال راه حلی برای این مشکل بصورت آنلاین بگردد. این عمل درخواستی را به دیتابیس خطا های ما از آیپی آدرس شما خواهد فرستاد.
|
||||
error.dismiss=لغو
|
||||
error.lookUpSolution=جستجوی راه حل
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=گاوصندوق
|
||||
|
||||
# Tray Menu
|
||||
traymenu.showMainWindow=نشان
|
||||
traymenu.showPreferencesWindow=تنظیمات
|
||||
traymenu.lockAllVaults=قفل کردن همگی
|
||||
traymenu.quitApplication=ترک
|
||||
traymenu.vault.unlock=بازکردن قفل
|
||||
traymenu.vault.lock=قفل
|
||||
@@ -31,19 +41,57 @@ traymenu.vault.reveal=ظاهر
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=اضافه کردن گاوصندوق
|
||||
## New
|
||||
addvaultwizard.new.title=افزودن گاوصندوق جدید
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=یک نام برای گاوصندوق انتخاب کنید
|
||||
addvaultwizard.new.namePrompt=نام گاوصندوق
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=کجا باید کریپتوماتور فایل های رمزگذاری شده گاوصندوق شما را نگهداری کند؟
|
||||
addvaultwizard.new.locationLoading=در حال بررسی سیستم فایل های لوکال برای پوشه های پیش فرض حافظه ابری…
|
||||
addvaultwizard.new.locationLabel=مکان ذخیرهسازی
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=مکان سفارشی
|
||||
addvaultwizard.new.directoryPickerButton=انتخاب کنید…
|
||||
addvaultwizard.new.directoryPickerTitle=انتخاب پوشه
|
||||
addvaultwizard.new.fileAlreadyExists=در حال حاضر یک فایل یا پوشه با همین نام وجود دارد
|
||||
addvaultwizard.new.locationDoesNotExist=پوشه ای در مسیر انتخاب شده وجود ندارد یا قابل دسترسی نیست
|
||||
addvaultwizard.new.locationIsNotWritable=دسترسی نوشتن در مسیر مشخص شده موجود نیست
|
||||
addvaultwizard.new.locationIsOk=مکانی مناسب برای گاوصندوق شما
|
||||
addvaultwizard.new.invalidName=نام گاوصندوق نامعتبر
|
||||
addvaultwizard.new.validName=نام گاوصندوق معتبر
|
||||
addvaultwizard.new.validCharacters.message=نام گاوصندوق میتواند شامل کاراکتر های زیر باشد:
|
||||
addvaultwizard.new.validCharacters.chars=کاراکتری های حرف(برای مثال a،ж یا 수)
|
||||
addvaultwizard.new.validCharacters.numbers=اعداد
|
||||
addvaultwizard.new.validCharacters.dashes=خط تیره (%s) و یا زیرخط (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=فعالسازی تنظیمات پیشرفته
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=لطفا مقداری بین 36 و 220 را وارد کنید(پیش فرض 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=برای آموختن بیشتر، مستندات را مطالعه کنید.
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=حداکثر طول اسم های رمزگذاری شده فایل ها
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=معتبر
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=ایجاد گاوصندوق
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=شما بدون رمزعبورتان، امکان دسترسی به اطلاعاتتان را نخواهید داشت. آیا میخواهید یک کلید بازیابی برای حالتی که رمزتان را فراموش کردید ایجاد کنید؟
|
||||
addvaultwizard.new.generateRecoveryKeyChoice.yes=بله لطفا، بهتره خیالم راحت باشه
|
||||
addvaultwizard.new.generateRecoveryKeyChoice.no=نه ممنون، رمز عبورم را گم نخواهم کرد
|
||||
### Information
|
||||
addvault.new.readme.storageLocation.fileName=مهم.rtf
|
||||
addvault.new.readme.storageLocation.1=⚠️ فایل های گاوصندوق ⚠️
|
||||
addvault.new.readme.storageLocation.2=این، مکان ذخیره سازی گاوصندوق شماست.
|
||||
addvault.new.readme.storageLocation.3=به هیچ عنوان
|
||||
addvault.new.readme.storageLocation.4=فایل های داخل این پوشه را تغییر ندهید و یا
|
||||
addvault.new.readme.storageLocation.5=فایلی را برای رمزگذاری داخل این پوشه paste نکنید.
|
||||
addvault.new.readme.storageLocation.6=اگر میخواهید فایل ها را رمزگذاری کنید و یا محتویات گاوصندوق را ببینید، این کار ها را بکنید:
|
||||
addvault.new.readme.storageLocation.8=2. قفل گاوصندوق را در کریپتوماتور باز کنید.
|
||||
addvault.new.readme.storageLocation.9=3. با کلیک روی دکمه "آشکار سازی"، به مکان دسترسی وارد شوید.
|
||||
addvault.new.readme.storageLocation.10=اگر نیاز به کمک دارید، به مستندات ما مراجعه کنید: %s
|
||||
addvault.new.readme.accessLocation.fileName=خوش آمدید.rtf
|
||||
addvault.new.readme.accessLocation.1=🔐️ درایو رمزگذاری شده 🔐️
|
||||
addvault.new.readme.accessLocation.2=این، مکان دسترسی گاوصندوق شماست.
|
||||
addvault.new.readme.accessLocation.3=هر فایلی که به این درایو اضافه شود بطور خودکار توسط کریپتوماتور رمزگذاری خواهد شد. شما میتوانید روی آن مثل هر پوشه یا درایور دیگری کار کنید. این فقط یک نمایش رمزگشایی شده از محتویات است. فایل های شما روی درایوتان همیشه رمزگذاری شده خواهند ماند.
|
||||
addvault.new.readme.accessLocation.4=میتوانید این فایل را حذف کنید.
|
||||
## Existing
|
||||
addvaultwizard.existing.title=اضافه کردن مخزن موجود
|
||||
addvaultwizard.existing.chooseBtn=انتخاب کنید…
|
||||
## Success
|
||||
|
||||
@@ -62,7 +110,9 @@ unlock.unlockBtn=بازکردن قفل
|
||||
### Waiting
|
||||
### Receive Key
|
||||
### Register Device
|
||||
### Register Device Legacy
|
||||
### Registration Success
|
||||
hub.registerSuccess.unlockBtn=بازکردن قفل
|
||||
### Registration Failed
|
||||
### Unauthorized
|
||||
### Requires Account Initialization
|
||||
@@ -89,11 +139,23 @@ lock.forced.retryBtn=تلاش مجدد
|
||||
## Fix Application
|
||||
|
||||
# Preferences
|
||||
preferences.title=تنظیمات
|
||||
## General
|
||||
preferences.general.quickAccessService=خزانه های قفل نشده را به دسترسی سریع اضافه کنید
|
||||
## 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
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.confirmBtn=حذف
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -106,10 +168,9 @@ lock.forced.retryBtn=تلاش مجدد
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=ببند
|
||||
main.supporterCertificateMissing.tooltip=لطفا کمک مالی در نظر بگیرند
|
||||
## Vault List
|
||||
main.vaultlist.contextMenu.lock=قفل
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
### Locked
|
||||
@@ -145,4 +206,8 @@ vaultOptions.mount.mountPoint.directoryPickerButton=انتخاب کنید…
|
||||
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -139,14 +139,10 @@ hub.receive.message=Odotetaan vastausta…
|
||||
hub.receive.description=Cryptomator yhdistää Hub:iin. Ole hyvä ja odota.
|
||||
### Register Device
|
||||
hub.register.nameLabel=Laitteen Nimi
|
||||
hub.register.occupiedMsg=Tämä nimi on jo käytössä
|
||||
hub.register.registerBtn=Vahvista
|
||||
### Register Device Legacy
|
||||
### Registration Success
|
||||
hub.registerSuccess.message=Laite nimetty onnistuneesti
|
||||
hub.registerSuccess.description=Käyttääksesi holvia, holvin omistajan on valtuutettava laitteesi.
|
||||
hub.registerSuccess.unlockBtn=Avaa
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=Laitteen nimeäminen epäonnistui
|
||||
hub.registerFailed.description=Nimeämisprosessissa tapahtui virhe. Löydät lisää tietoja lokitiedostoista.
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=Pääsy estetty
|
||||
hub.unauthorized.description=Laitteellasi ei ole pääsyvaltuutusta tähän holviin. Pyydä holvin omistajaa lisäämän valtuutus laitteellesi.
|
||||
@@ -210,7 +206,10 @@ preferences.title=Asetukset
|
||||
## Interface
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
## Contribution
|
||||
|
||||
### Remove License Key Dialog
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -223,12 +222,11 @@ preferences.title=Asetukset
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Sulje
|
||||
main.preferencesBtn.tooltip=Asetukset
|
||||
## Vault List
|
||||
main.vaultlist.contextMenu.lock=Lukitse
|
||||
main.vaultlist.contextMenu.unlockNow=Avaa Nyt
|
||||
main.vaultlist.contextMenu.reveal=Paljasta Asema
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
### Locked
|
||||
@@ -269,4 +267,9 @@ vaultOptions.masterkey.changePasswordBtn=Vaihda salasana
|
||||
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=Avaa asetukset
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -47,6 +47,7 @@ addvaultwizard.new.nameInstruction=Pangalanan ang vault
|
||||
addvaultwizard.new.namePrompt=Pangalan ng Vault
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Saan maaaring ilagay ng Cryptomator ang mga encrypted files ng iyong vault?
|
||||
addvaultwizard.new.locationLoading=Sinusuri ang lokal na filesystem para sa mga default na direktoryo ng cloud storage…
|
||||
addvaultwizard.new.locationLabel=Storage location
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Custom Location
|
||||
@@ -141,6 +142,9 @@ unlock.error.customPath.description.hideawayNotDir=Ang pansamantalang nakatagong
|
||||
unlock.error.customPath.description.couldNotBeCleaned=Hindi ma-mount ang iyong vault sa path na "%s". Pakisubukang muli o pumili ng ibang landas.
|
||||
unlock.error.customPath.description.notEmptyDir=Ang custom na mount path na "%s" ay hindi isang walang laman na folder. Mangyaring pumili ng isang walang laman na folder at subukang muli.
|
||||
unlock.error.customPath.description.generic=Pumili ka ng custom na mount path para sa vault na ito, ngunit nabigo ang paggamit nito sa mensaheng: %2$s
|
||||
unlock.error.restartRequired.message=Hindi mabuksan ang vault
|
||||
unlock.error.restartRequired.description=Baguhin ang uri ng volume sa mga opsyon sa vault o i-restart ang Cryptomator.
|
||||
unlock.error.title=Hindi mabuksan ang "%s"
|
||||
## Hub
|
||||
hub.noKeychain.message=Hindi ma-access ang key ng device
|
||||
hub.noKeychain.description=Para ma-unlock ang mga Hub vault, kailangan ng device key, na sini-secure gamit ang keychain. Upang magpatuloy, paganahin ang “%s” at pumili ng keychain sa mga kagustuhan.
|
||||
@@ -154,17 +158,22 @@ hub.receive.message=Pinoproseso ang tugon…
|
||||
hub.receive.description=Ang Cryptomator ay tumatanggap at nagpoproseso ng tugon mula sa Hub. Mangyaring maghintay.
|
||||
### Register Device
|
||||
hub.register.message=Bagong Device
|
||||
hub.register.description=Ito ang unang Hub access mula sa device na ito. Mangyaring pahintulutan ito gamit ang iyong Account Key.
|
||||
hub.register.description=Ito ang unang Hub access mula sa device na ito. Mangyaring irehistro ito gamit ang iyong Account Key.
|
||||
hub.register.nameLabel=Pangalan ng device
|
||||
hub.register.invalidAccountKeyLabel=Di-wastong Account Key
|
||||
hub.register.occupiedMsg=Ang pangalan ay nagamit na
|
||||
hub.register.registerBtn=Kumpirmahin
|
||||
hub.register.registerBtn=Magparehistro
|
||||
### Register Device Legacy
|
||||
hub.register.legacy.occupiedMsg=Ang pangalan ay nagamit na
|
||||
hub.register.legacy.description=Ito ang unang Hub access mula sa device na ito. Mangyaring irehistro ito.
|
||||
### Registration Success
|
||||
hub.registerSuccess.message=Pinangalanan ang device
|
||||
hub.registerSuccess.description=Para ma-access ang vault, kailangang pahintulutan ng may-ari ng vault ang iyong device.
|
||||
hub.registerSuccess.message=Rehistrado na ang device
|
||||
hub.registerSuccess.description=Ang iyong device ay matagumpay sa pag rehistrado. Maaari mo nang buksan ang vault.
|
||||
hub.registerSuccess.unlockBtn=I-unlock
|
||||
hub.registerSuccess.legacy.description=Para ma-access ang vault, kailangang pahintulutan ng may-ari ng vault ang iyong device.
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=Nabigo ang pagpapangalan ng device
|
||||
hub.registerFailed.description=Nagkaroon ng error sa proseso ng pagbibigay ng pangalan. Para sa higit pang mga detalye, tingnan ang log ng aplikasyon.
|
||||
hub.registerFailed.message=Ang pag rehistrado ng device ay pumalya
|
||||
hub.registerFailed.description.generic=Nagkaroon ng error sa proseso ng pag registrado. Para sa higit pang mga detalye, tingnan ang log ng aplikasyon.
|
||||
hub.registerFailed.description.deviceAlreadyExists=Ang device na ito ay registrado na sa ibang user. Subukang palitan ang user account o gumamit ng ibang device.
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=Walang pahintulot
|
||||
hub.unauthorized.description=Hindi pa pinahihintulutan ang iyong device na i-access ang vault na ito. Hilingin sa may-ari ng vault na pahintulutan ito.
|
||||
@@ -278,6 +287,7 @@ preferences.general.debugLogging=Paganahin ang pag-log ng debug
|
||||
preferences.general.debugDirectory=Magbunyag ng mga log file
|
||||
preferences.general.autoStart=Ilunsad ang Cryptomator sa pagsisimula ng system
|
||||
preferences.general.keychainBackend=Mag-imbak ng mga password gamit ang
|
||||
preferences.general.quickAccessService=Magdagdag ng mga naka-unlock na vault sa lugar ng mabilisang pag-access
|
||||
## Interface
|
||||
preferences.interface=Interface
|
||||
preferences.interface.theme=Tingnan at Pakiramdam
|
||||
@@ -290,13 +300,14 @@ preferences.interface.language.auto=System Default
|
||||
preferences.interface.interfaceOrientation=Oryentasyon ng Interface
|
||||
preferences.interface.interfaceOrientation.ltr=Kaliwa hanggang Kanan
|
||||
preferences.interface.interfaceOrientation.rtl=Kanan papuntang Kaliwa
|
||||
preferences.interface.showMinimizeButton=Ipakita ang pindutan ng minimize
|
||||
preferences.interface.showTrayIcon=Ipakita ang icon ng tray (kailangan i-restart)
|
||||
## Volume
|
||||
preferences.volume=Virtual Drive
|
||||
preferences.volume.type=Default na Uri ng Dami
|
||||
preferences.volume.type.automatic=Awtomatiko
|
||||
preferences.volume.docsTooltip=Buksan ang dokumentasyon para matuto pa tungkol sa iba't ibang uri ng volume.
|
||||
preferences.volume.fuseRestartRequired=Upang mailapat ang mga pagbabago, kailangang i-restart ang Cryptomator.
|
||||
preferences.volume.tcp.port=Default na TCP Port
|
||||
preferences.volume.supportedFeatures=Sinusuportahan ng napiling uri ng volume ang mga sumusunod na tampok:
|
||||
preferences.volume.feature.mountAuto=Awtomatikong pagpili ng mount point
|
||||
preferences.volume.feature.mountToDir=Custom na direktoryo bilang mount point
|
||||
@@ -309,12 +320,23 @@ preferences.updates.currentVersion=Kasalukuyang Bersyon: %s
|
||||
preferences.updates.autoUpdateCheck=Awtomatikong suriin ang mga update
|
||||
preferences.updates.checkNowBtn=Tingnan ngayon
|
||||
preferences.updates.updateAvailable=Available ang update sa bersyong %s.
|
||||
preferences.updates.lastUpdateCheck=Huling pagsusuri: %s
|
||||
preferences.updates.lastUpdateCheck.never=hindi kailanman
|
||||
preferences.updates.lastUpdateCheck.recently=kamakailan
|
||||
preferences.updates.lastUpdateCheck.daysAgo=%s araw ang lumipas
|
||||
preferences.updates.lastUpdateCheck.hoursAgo=%s oras ang lumipas
|
||||
preferences.updates.checkFailed=Nabigo ang paghahanap ng mga update. Pakisuri ang iyong koneksyon sa internet o subukang muli sa ibang pagkakataon.
|
||||
preferences.updates.upToDate=Ang Cryptomator ay napapanahon.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Suportahan Kami
|
||||
preferences.contribute.registeredFor=Nakarehistro ang sertipiko ng tagasuporta para sa %s
|
||||
preferences.contribute.noCertificate=Suportahan ang Cryptomator at tumanggap ng sertipiko ng tagasuporta. Ito ay tulad ng isang susi ng lisensya ngunit para sa mga kahanga-hangang tao na gumagamit ng libreng software. ;-)
|
||||
preferences.contribute.getCertificate=Wala ka na ba? Alamin kung paano mo ito makukuha.
|
||||
preferences.contribute.promptText=I-paste ang code ng certificate ng tagasuporta dito
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.confirmBtn=Tanggalin
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -356,11 +378,6 @@ stats.access.total=Kabuuang mga access: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Isara
|
||||
main.minimizeBtn.tooltip=I-minimize
|
||||
main.preferencesBtn.tooltip=Mga Kagustuhan
|
||||
main.debugModeEnabled.tooltip=Naka-enable ang debug mode
|
||||
main.supporterCertificateMissing.tooltip=Mangyaring isaalang-alang ang pagbibigay ng donasyon
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Mag-click dito para magdagdag ng vault
|
||||
main.vaultlist.contextMenu.remove=Alisin…
|
||||
@@ -369,9 +386,7 @@ main.vaultlist.contextMenu.unlock=I-unlock…
|
||||
main.vaultlist.contextMenu.unlockNow=I-unlock Ngayon
|
||||
main.vaultlist.contextMenu.vaultoptions=Ipakita ang Mga Opsyon sa Vault
|
||||
main.vaultlist.contextMenu.reveal=Ibunyag ang Drive
|
||||
main.vaultlist.addVaultBtn=Idagdag
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Bagong Vault...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Kasalukuyang Vault...
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Salamat sa pagpili sa Cryptomator para protektahan ang iyong mga file. Kung kailangan mo ng anumang tulong, tingnan ang aming mga gabay sa pagsisimula:
|
||||
@@ -381,6 +396,7 @@ main.vaultDetail.unlockBtn=I-unlock…
|
||||
main.vaultDetail.unlockNowBtn=I-unlock Ngayon
|
||||
main.vaultDetail.optionsBtn=Mga Pagpipilian sa Vault
|
||||
main.vaultDetail.passwordSavedInKeychain=Na-save ang password
|
||||
main.vaultDetail.share=Ibahagi…
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=NAKA-unlock
|
||||
main.vaultDetail.accessLocation=Ang mga nilalaman ng iyong vault ay maa-access dito:
|
||||
@@ -435,6 +451,7 @@ vaultOptions.general.startHealthCheckBtn=Simulan ang Health Check
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=Pag-mount
|
||||
vaultOptions.mount.info=Buksan ang mga kagustuhan sa virtual drive upang baguhin ang mga default na setting.
|
||||
vaultOptions.mount.readonly=Basahin lamang
|
||||
vaultOptions.mount.customMountFlags=Mga custom na naka-mount na flag
|
||||
vaultOptions.mount.winDriveLetterOccupied=inookupahan
|
||||
@@ -444,6 +461,10 @@ vaultOptions.mount.mountPoint.driveLetter=Gumamit ng nakatalagang drive letter
|
||||
vaultOptions.mount.mountPoint.custom=Gamitin ang napiling direktoryo
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Mamili…
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Pumili ng isang direktoryo
|
||||
vaultOptions.mount.volumeType.default=Default (%s)
|
||||
vaultOptions.mount.volumeType.restartRequired=Upang magamit ang uri ng volume na ito, kailangang i-restart ang Cryptomator.
|
||||
vaultOptions.mount.volume.tcp.port=TCP Port
|
||||
vaultOptions.mount.volume.type=Uri ng Dami
|
||||
## Master Key
|
||||
vaultOptions.masterkey=Password
|
||||
vaultOptions.masterkey.changePasswordBtn=Palitan ANG password
|
||||
@@ -513,4 +534,30 @@ updateReminder.message=I-tsek kung may bagong update?
|
||||
updateReminder.description=Manatiling updated sa mga bagong feature, pag-aayos ng bug, at pagpapahusay sa seguridad. Inirerekomenda naming awtomatikong suriin ang mga update.
|
||||
updateReminder.notNow=Hindi ngayon
|
||||
updateReminder.yesOnce=Oo, Minsan
|
||||
updateReminder.yesAutomatically=Oo, Awtomatiko
|
||||
updateReminder.yesAutomatically=Oo, Awtomatiko
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.title=Paunawa sa paghinto sa paggamit
|
||||
dokanySupportEnd.message=Pagtatapos ng suporta para sa Dokany
|
||||
dokanySupportEnd.description=Ang uri ng volume na Dokany ay hindi na sinusuportahan ng Cryptomator. Isinasaayos ang iyong mga setting upang magamit ang default na uri ng volume ngayon. Maaari mong tingnan ang default na uri sa mga kagustuhan.
|
||||
dokanySupportEnd.preferencesBtn=Buksan ang Mga Kagustuhan
|
||||
|
||||
# Share Vault
|
||||
shareVault.title=Ibahagi ang Vault
|
||||
shareVault.message=Gusto mo bang ibahagi ang iyong vault sa iba?
|
||||
shareVault.description=Maingat palagi pag binabahagi ang iyong vault sa ibang tao. Sa maikling salita, sundin ang mga hakbangin:
|
||||
shareVault.instruction.1=1. Ibahagi ang access ng naka-encrypt na folder ng vault sa pamamagitan ng cloud storage.
|
||||
shareVault.instruction.2=2. Ibahagi ang password ng vault sa isang secure na paraan.
|
||||
shareVault.remarkBestPractices=Para sa higit pang impormasyon, tingnan ang mga mungkahi sa pinakamahuhusay na kagawian sa aming mga doc.
|
||||
shareVault.docsTooltip=Buksan ang dokumentasyon para matuto pa tungkol sa pagbabahagi ng mga vault.
|
||||
shareVault.hubAd.description=Ang ligtas na paraan upang magtrabaho sa mga koponan
|
||||
shareVault.hubAd.keyManagement=• Zero-knowledge key management
|
||||
shareVault.hubAd.authentication=• Malakas na pagpapatunay
|
||||
shareVault.hubAd.encryption=• End-to-end na pag-encrypt
|
||||
shareVault.visitHub=Pagbisita ang Cryptomator Hub
|
||||
|
||||
shareVault.hub.message=Paano ibahagi ang Hub vault
|
||||
shareVault.hub.description=Upang maibahagi ang nilalaman ng vault sa isa pang miyembro ng koponan, kailangan mong magsagawa ng dalawang hakbang:
|
||||
shareVault.hub.instruction.1=1. Ibahagi ang access ng naka-encrypt na folder ng vault sa pamamagitan ng cloud storage.
|
||||
shareVault.hub.instruction.2=2. Magbigay ng access sa miyembro ng team sa Cryptomator Hub.
|
||||
shareVault.hub.openHub=Buksan ang Cryptomator Hub
|
||||
@@ -47,6 +47,7 @@ addvaultwizard.new.nameInstruction=Choisir un nom pour le coffre
|
||||
addvaultwizard.new.namePrompt=Nom du coffre
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Où Cryptomator doit-il stocker les fichiers chiffrés de votre coffre ?
|
||||
addvaultwizard.new.locationLoading=Vérification du système de fichiers local pour les répertoires de stockage par défaut du cloud…
|
||||
addvaultwizard.new.locationLabel=Emplacement de stockage
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Emplacement personnalisé
|
||||
@@ -141,8 +142,8 @@ unlock.error.customPath.description.hideawayNotDir=Le fichier temporaire et cach
|
||||
unlock.error.customPath.description.couldNotBeCleaned=Votre coffre n'a pas pu être monté au point "%s". Veuillez réessayer ou choisissez un autre point.
|
||||
unlock.error.customPath.description.notEmptyDir=Le chemin de montage personnalisé "%s" n'est pas un dossier vide. Veuillez choisir un dossier vide et réessayez.
|
||||
unlock.error.customPath.description.generic=Vous avez sélectionné un point de montage personnalisé pour ce coffre, mais son utilisation a échoué avec le message : %2$s
|
||||
unlock.error.fuseRestartRequired.message=Impossible de déverrouiller le coffre
|
||||
unlock.error.fuseRestartRequired.description=Changez le type de volume dans les options du coffre ou redémarrez Cryptomator.
|
||||
unlock.error.restartRequired.message=Impossible de déverrouiller le volume
|
||||
unlock.error.restartRequired.description=Modifiez le type de volume dans les options du coffre ou redémarrez Cryptomator.
|
||||
unlock.error.title=Échec du déverrouillage de "%s"
|
||||
## Hub
|
||||
hub.noKeychain.message=Impossible d'accéder à la clé du périphérique
|
||||
@@ -160,14 +161,19 @@ hub.register.message=Nouvel Appareil
|
||||
hub.register.description=Il s'agit du premier accès de cet appareil au Hub. Veuillez l'autoriser à l'aide de votre clé de compte.
|
||||
hub.register.nameLabel=Nom de l'appareil
|
||||
hub.register.invalidAccountKeyLabel=Clé de compte invalide
|
||||
hub.register.occupiedMsg=Nom déjà utilisé
|
||||
hub.register.registerBtn=Confirmer
|
||||
hub.register.registerBtn=Inscription
|
||||
### Register Device Legacy
|
||||
hub.register.legacy.occupiedMsg=Nom déjà utilisé
|
||||
hub.register.legacy.description=Il s'agit du premier accès de cet appareil au Hub. Veuillez l'autoriser à l'aide de votre clé de compte.
|
||||
### Registration Success
|
||||
hub.registerSuccess.message=Appareil nommé
|
||||
hub.registerSuccess.description=Pour accéder au coffre, votre appareil doit être autorisé par le propriétaire du coffre.
|
||||
hub.registerSuccess.message=Appareil enregistré
|
||||
hub.registerSuccess.description=Votre appareil est enregistré avec succès. Vous pouvez maintenant continuer à déverrouiller le coffre.
|
||||
hub.registerSuccess.unlockBtn=Déverrouiller
|
||||
hub.registerSuccess.legacy.description=Pour accéder au coffre, votre appareil doit être autorisé par le propriétaire du coffre.
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=Échec du nommage de l'appareil
|
||||
hub.registerFailed.description=Le processus de nommage a retourné une erreur. Pour plus de détails, regardez dans le journal de l'application.
|
||||
hub.registerFailed.message=Echec de l'enregistrement de l'appareil
|
||||
hub.registerFailed.description.generic=Le processus de nommage a retourné une erreur. Pour plus de détails, regardez dans le journal de l'application.
|
||||
hub.registerFailed.description.deviceAlreadyExists=Cet appareil est déjà enregistré pour un autre utilisateur. Essayez de changer de compte ou utilisez un autre appareil.
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=Accès refusé
|
||||
hub.unauthorized.description=Votre appareil n'a pas encore été autorisé à accéder à ce coffre. Demandez au propriétaire du coffre de l'autoriser.
|
||||
@@ -281,6 +287,7 @@ preferences.general.debugLogging=Activer les logs debug
|
||||
preferences.general.debugDirectory=Afficher le journal
|
||||
preferences.general.autoStart=Lancer Cryptomator au démarrage du système
|
||||
preferences.general.keychainBackend=Stocker les mots de passe avec
|
||||
preferences.general.quickAccessService=Ajouter les coffres déverrouillés à la zone d'accès rapide
|
||||
## Interface
|
||||
preferences.interface=Interface
|
||||
preferences.interface.theme=Apparence
|
||||
@@ -293,8 +300,8 @@ preferences.interface.language.auto=Valeur du système
|
||||
preferences.interface.interfaceOrientation=Orientation de l'interface
|
||||
preferences.interface.interfaceOrientation.ltr=De gauche à droite
|
||||
preferences.interface.interfaceOrientation.rtl=De droite à gauche
|
||||
preferences.interface.showMinimizeButton=Afficher le bouton Réduire
|
||||
preferences.interface.showTrayIcon=Montrer l'icône de service (redémarrage nécessaire)
|
||||
preferences.interface.compactMode=Activer la liste compacte des coffres
|
||||
## Volume
|
||||
preferences.volume=Disque virtuel
|
||||
preferences.volume.type=Type de volume par défaut
|
||||
@@ -314,12 +321,29 @@ 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
|
||||
preferences.contribute.noCertificate=Soutenez Cryptomator et recevez un certificat de soutien. C'est comme une clé de licence, mais pour des gens géniaux qui utilisent des logiciels libres. ;-)
|
||||
preferences.contribute.getCertificate=Vous n'en avez pas encore? Découvrez comment vous pouvez l'obtenir.
|
||||
preferences.contribute.promptText=Collez le code du certificat du supporter ici
|
||||
preferences.contribute.thankYou=Merci de soutenir le développement open-source de Cryptomator !
|
||||
preferences.contribute.donate=Faire un don
|
||||
preferences.contribute.sponsor=Parrain
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.title=Supprimer le certificat
|
||||
removeCert.message=Supprimer le certificat de soutien ?
|
||||
removeCert.description=
|
||||
removeCert.confirmBtn=Retirer
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -361,11 +385,6 @@ stats.access.total=Total des accès: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Fermer
|
||||
main.minimizeBtn.tooltip=Réduire
|
||||
main.preferencesBtn.tooltip=Préférences
|
||||
main.debugModeEnabled.tooltip=Le mode débogage est activé
|
||||
main.supporterCertificateMissing.tooltip=Merci d'envisager un don
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Cliquez ici pour ajouter un volume chiffré
|
||||
main.vaultlist.contextMenu.remove=Retirer…
|
||||
@@ -374,9 +393,11 @@ main.vaultlist.contextMenu.unlock=Déverrouiller…
|
||||
main.vaultlist.contextMenu.unlockNow=Déverrouiller maintenant
|
||||
main.vaultlist.contextMenu.vaultoptions=Afficher les options du volume chiffré
|
||||
main.vaultlist.contextMenu.reveal=Afficher le lecteur
|
||||
main.vaultlist.addVaultBtn=Ajouter
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Nouveau coffre...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Coffre existant...
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Créer un nouveau coffre...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Ouvrir un coffre existant...
|
||||
##Notificaition
|
||||
main.notification.updateAvailable=Mise à jour disponible.
|
||||
main.notification.support=Soutenir Cryptomator.
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Merci d'avoir choisi Cryptomator pour protéger vos fichiers. Si vous avez besoin d'aide, consultez nos guides de démarrage :
|
||||
@@ -386,6 +407,7 @@ main.vaultDetail.unlockBtn=Déverrouiller…
|
||||
main.vaultDetail.unlockNowBtn=Déverrouiller maintenant
|
||||
main.vaultDetail.optionsBtn=Options du volume chiffré
|
||||
main.vaultDetail.passwordSavedInKeychain=Mot de passe enregistré
|
||||
main.vaultDetail.share=Partager...
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=DÉVERROUILLÉ
|
||||
main.vaultDetail.accessLocation=Le contenu de votre coffre est accessible ici :
|
||||
@@ -451,7 +473,7 @@ vaultOptions.mount.mountPoint.custom=Utiliser le répertoire choisi
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Choisir...
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Choisissez un répertoire
|
||||
vaultOptions.mount.volumeType.default=Par défaut (%s)
|
||||
vaultOptions.mount.volumeType.fuseRestartRequired=Pour utiliser ce type de volume, Cryptomator doit être redémarré.
|
||||
vaultOptions.mount.volumeType.restartRequired=Pour utiliser ce type de volume, Cryptomator doit être redémarré.
|
||||
vaultOptions.mount.volume.tcp.port=Port TCP
|
||||
vaultOptions.mount.volume.type=Type de volume
|
||||
## Master Key
|
||||
@@ -470,7 +492,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
|
||||
@@ -523,4 +545,30 @@ updateReminder.message=Rechercher des mises à jour ?
|
||||
updateReminder.description=Restez à jour avec de nouvelles fonctionnalités, des corrections de bugs et des améliorations de sécurité. La vérification automatique des mises à jour est recommandée.
|
||||
updateReminder.notNow=Plus tard
|
||||
updateReminder.yesOnce=Cette fois seulement
|
||||
updateReminder.yesAutomatically=Oui, automatiquement
|
||||
updateReminder.yesAutomatically=Oui, automatiquement
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.title=Avis d'obsolescence
|
||||
dokanySupportEnd.message=Fin de la prise en charge de Dokany
|
||||
dokanySupportEnd.description=Le type de volume Dokany n'est plus pris en charge par Cryptomator. Vos paramètres sont à présent ajustés pour utiliser le type de volume par défaut. Vous pouvez voir le type par défaut dans les préférences.
|
||||
dokanySupportEnd.preferencesBtn=Ouvrir les préférences
|
||||
|
||||
# Share Vault
|
||||
shareVault.title=Partager le coffre
|
||||
shareVault.message=Vous aimeriez partager votre coffre avec d'autres personnes ?
|
||||
shareVault.description=Soyez toujours prudent lorsque vous partagez votre coffre avec d'autres personnes. En bref, suivez ces étapes :
|
||||
shareVault.instruction.1=1. Partagez l'accès du dossier de coffre chiffré via le stockage cloud.
|
||||
shareVault.instruction.2=2. Partagez le mot de passe du coffre de manière sécurisée.
|
||||
shareVault.remarkBestPractices=Pour plus d'informations, consultez les suggestions des meilleures pratiques de notre documentation.
|
||||
shareVault.docsTooltip=Ouvrez la documentation pour en savoir plus sur le partage des coffres.
|
||||
shareVault.hubAd.description=La façon sécurisée de travailler en équipe
|
||||
shareVault.hubAd.keyManagement=• Gestion des clés sans connaissance
|
||||
shareVault.hubAd.authentication=• Authentification forte
|
||||
shareVault.hubAd.encryption=Chiffrement de bout en bout
|
||||
shareVault.visitHub=Visiter le Hub Cryptomator
|
||||
|
||||
shareVault.hub.message=Comment partager un coffre central
|
||||
shareVault.hub.description=Afin de partager le contenu du coffre avec un autre membre de l'équipe, vous devez effectuer deux étapes :
|
||||
shareVault.hub.instruction.1=1. Partagez l'accès du dossier de coffre chiffré via le stockage cloud.
|
||||
shareVault.hub.instruction.2=2. Accorder l'accès au membre de l'équipe dans Cryptomator Hub.
|
||||
shareVault.hub.openHub=Ouvrir le Hub Cryptomator
|
||||
@@ -45,6 +45,7 @@ error.message=Produciuse un erro
|
||||
### Waiting
|
||||
### Receive Key
|
||||
### Register Device
|
||||
### Register Device Legacy
|
||||
### Registration Success
|
||||
### Registration Failed
|
||||
### Unauthorized
|
||||
@@ -76,7 +77,11 @@ lock.forced.retryBtn=Tentar de novo
|
||||
## Interface
|
||||
## Volume
|
||||
## Updates
|
||||
|
||||
## Contribution
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.confirmBtn=Eliminar
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -89,8 +94,8 @@ lock.forced.retryBtn=Tentar de novo
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Pechar
|
||||
## Vault List
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
### Locked
|
||||
@@ -123,4 +128,8 @@ main.closeBtn.tooltip=Pechar
|
||||
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -153,14 +153,10 @@ hub.receive.message=מעבד תשובה…
|
||||
hub.receive.description=Cryptomator מקבל ומעבד את התשובה מה- האב. אנא המתן.
|
||||
### Register Device
|
||||
hub.register.nameLabel=שם מכשיר
|
||||
hub.register.occupiedMsg=שם זה נמצא כבר בשימוש
|
||||
hub.register.registerBtn=אישור
|
||||
### Register Device Legacy
|
||||
### Registration Success
|
||||
hub.registerSuccess.message=שם המכשיר
|
||||
hub.registerSuccess.description=כדי לגשת לכספת, המכשיר שלך צריך לקבל הרשאה על ידי בעלי הכספת.
|
||||
hub.registerSuccess.unlockBtn=בטל נעילה
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=הגדרת שם למכשיר נכשלה
|
||||
hub.registerFailed.description=ארעה שגיאה בתהליך עם השם. לפרטים נוספים הסתכל בלוג האפליקציה.
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=הגישה נדחתה
|
||||
hub.unauthorized.description=המכשיר שלך טרם אושר לגשת לכספת הזאת. יש לבקש אישור גישה מבעל הכספת.
|
||||
@@ -282,7 +278,6 @@ preferences.interface.language.auto=ברירת המחדל של המערכת
|
||||
preferences.interface.interfaceOrientation=כיוון ממשק
|
||||
preferences.interface.interfaceOrientation.ltr=משמאל לימין
|
||||
preferences.interface.interfaceOrientation.rtl=מימין לשמאל
|
||||
preferences.interface.showMinimizeButton=הצג כפתור מזעור
|
||||
preferences.interface.showTrayIcon=הצג צלמית בשורה מטה (דורש הפעלה מחדש)
|
||||
## Volume
|
||||
preferences.volume=כונן וירטואלי
|
||||
@@ -301,12 +296,16 @@ preferences.updates.currentVersion=הגרסה הנוכחית: %s
|
||||
preferences.updates.autoUpdateCheck=בצע בדיקת עדכונים אוטומטית
|
||||
preferences.updates.checkNowBtn=בדוק כעת
|
||||
preferences.updates.updateAvailable=שדרוג לגרסה %s זמין.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=תמוך בנו
|
||||
preferences.contribute.registeredFor=אישור על תמיכה על שם %s
|
||||
preferences.contribute.noCertificate=תמכו ב-Cryptomator וקבלו תעודת תמיכה. זה כמו מפתח רישוי רק לאנשים מדהימים שמשתמשים בתוכנה חופשית. ;-)
|
||||
preferences.contribute.getCertificate=עדיין אין לכם אחד? לימדו כיצד אתם יכולים להשיג אותו.
|
||||
preferences.contribute.promptText=הדבק את קוד תעודת התומך כאן
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.confirmBtn=הסר
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -348,11 +347,6 @@ stats.access.total=מספר גישות כולל: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=סגור
|
||||
main.minimizeBtn.tooltip=מזער
|
||||
main.preferencesBtn.tooltip=העדפות
|
||||
main.debugModeEnabled.tooltip=מצב דיבאג מופעל
|
||||
main.supporterCertificateMissing.tooltip=תרומתך תתקבל בברכה
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=לחץ כאן להוספת כספת
|
||||
main.vaultlist.contextMenu.remove=הסר…
|
||||
@@ -361,8 +355,7 @@ main.vaultlist.contextMenu.unlock=שחרר נעילה…
|
||||
main.vaultlist.contextMenu.unlockNow=בטל נעילה כעת
|
||||
main.vaultlist.contextMenu.vaultoptions=הצג את אפשרויות הכספת
|
||||
main.vaultlist.contextMenu.reveal=חשוף את הכונן
|
||||
main.vaultlist.addVaultBtn=הוספה
|
||||
main.vaultlist.addVaultBtn.menuItemNew=פתיחת כספת...
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=תודה שבחרת ב- Cryptomator להגן על הקבצים שלך. אם אתה זקוק לסיוע, אנא עיין במדריכים שלנו:
|
||||
@@ -495,4 +488,9 @@ quit.forced.forceAndQuitBtn=נעילה בכח ויציאה
|
||||
# Update Reminder
|
||||
updateReminder.title=בדיקת עדכון
|
||||
updateReminder.message=חפש עדכונים?
|
||||
updateReminder.notNow=לא עכשיו
|
||||
updateReminder.notNow=לא עכשיו
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=פתח העדפות
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -20,6 +20,9 @@ error.description=क्रिप्टोमेटर ने ऐसा हो
|
||||
error.hyperlink.lookup=इस त्रुटि को ढूंढिए
|
||||
error.hyperlink.report=त्रुटि रिपोर्ट करें
|
||||
error.technicalDetails=अधिक जानकारी:
|
||||
error.hyperlink.solution=समाधान खोजें
|
||||
error.dismiss=खारिज करें
|
||||
error.lookUpSolution=समाधान खोजें
|
||||
|
||||
# Defaults
|
||||
defaults.vault.vaultName=वॉल्ट
|
||||
@@ -36,6 +39,7 @@ traymenu.vault.reveal=प्रत्यक्ष करें
|
||||
# Add Vault Wizard
|
||||
addvaultwizard.title=वाउल्ट डालें
|
||||
## New
|
||||
addvaultwizard.new.title=नयी तिजोरी बनाये
|
||||
### Name
|
||||
addvaultwizard.new.nameInstruction=वाउल्ट के लिए नाम चुनें
|
||||
addvaultwizard.new.namePrompt=वॉल्ट का नाम
|
||||
@@ -53,8 +57,15 @@ addvaultwizard.new.locationIsOk=आपकी सुरक्षित तिज
|
||||
addvaultwizard.new.invalidName=तिजोरी के लिए इस नाम का उपयोग नहीं किया जा सकता
|
||||
addvaultwizard.new.validName=आप इस नाम का उपयोग कर सकते हैं
|
||||
addvaultwizard.new.validCharacters.message=नाम के लिए केवल इन वर्णों का उपयोग कर सकते हैं
|
||||
addvaultwizard.new.validCharacters.chars=शब्दो के अक्षर (अ. ब., e.g. a, ж और 수)
|
||||
addvaultwizard.new.validCharacters.numbers=नंबर
|
||||
addvaultwizard.new.validCharacters.dashes=हाइफ़न (%s) या अंडरस्कोर (%s)
|
||||
### Expert Settings
|
||||
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=विशेषज्ञ सेटिंग सक्षम करें
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=36 से 220 अक्षरोंका शब्द दर्ज करें (निर्धारित 220)
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=अधिक जानने के लिए दस्तावेज़ खोलें |
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.title=एन्क्रिप्टेड फ़ाइल नामों की अधिकतम लंबाई
|
||||
addvaultwizard.new.expertSettings.shorteningThreshold.valid=मान्य
|
||||
### Password
|
||||
addvaultwizard.new.createVaultBtn=वॉल्ट बनाएं
|
||||
addvaultwizard.new.generateRecoveryKeyChoice=आप अपने पासवर्ड के बिना अपने डेटा तक नहीं पहुंच पाएंगे। क्या आप उस वक़्त के लिए एक पुनर्प्राप्ति कुंजी चाहते हैं जब आप अपना पासवर्ड खो देते हैं?
|
||||
@@ -77,6 +88,7 @@ addvault.new.readme.accessLocation.2=आप अपनी वॉल्ट यह
|
||||
addvault.new.readme.accessLocation.3=इस वॉल्यूम में कोई नई फाइल डालने पर क्रिप्टोमैटोर उसे एन्क्रिप्ट करदेगा। आप इसे कोई भी सामान्य फोल्डर की तरह समझ के काम कर सकते हैं। यह सिर्फ डेक्रिप्टेड व्यू है, हार्ड डिस्क पर आपकी फाइल्स हर समय एन्क्रिप्टेड रहेंगी।
|
||||
addvault.new.readme.accessLocation.4=आप इस फाइल को बेझिझक डिलीट कर सकते हैं।
|
||||
## Existing
|
||||
addvaultwizard.existing.title=मौजूदा तिजोरी को जोड़ें
|
||||
addvaultwizard.existing.chooseBtn=चुनें…
|
||||
addvaultwizard.existing.filePickerTitle=तिजोरी फ़ाइल चुनें
|
||||
addvaultwizard.existing.filePickerMimeDesc=क्रिप्टोमेटर वॉल्ट
|
||||
@@ -98,6 +110,7 @@ changepassword.finalConfirmation=मैं समझता/समझती ह
|
||||
# Forget Password
|
||||
forgetPassword.title=पासवर्ड भूल गए
|
||||
forgetPassword.message=पासवर्ड भूल गए?
|
||||
forgetPassword.description=यह आपके तिजोरी का सहेजा गया पासवर्ड सिस्टम कीचेन से हटा देगा।
|
||||
forgetPassword.confirmBtn=पासवर्ड भूल गए
|
||||
|
||||
# Unlock
|
||||
@@ -106,25 +119,43 @@ unlock.passwordPrompt="%s" का पासवर्ड दर्ज करे
|
||||
unlock.savePassword=पासवर्ड याद रखें
|
||||
unlock.unlockBtn=अनलॉक करें
|
||||
## Select
|
||||
unlock.chooseMasterkey.message=मास्टरकी फ़ाइल नहीं मिली
|
||||
unlock.chooseMasterkey.description=क्रिप्टोमेटर "%s" की मास्टर-चाबी नहीं ढूंढ पाया। कृपया उस फाइल को हाथ से ढूंढे।
|
||||
unlock.chooseMasterkey.filePickerTitle=मास्टरकी फ़ाइल का चयन करें
|
||||
unlock.chooseMasterkey.filePickerMimeDesc=क्रिप्टोमेटर मास्टरकी
|
||||
## Success
|
||||
unlock.success.message=अनलॉक सफल हुआ
|
||||
unlock.success.rememberChoice=विकल्प याद रखें, दोबारा ना दिखाएं
|
||||
unlock.success.revealBtn=फोल्डर खोलें
|
||||
## Failure
|
||||
unlock.error.customPath.message=तिजोरी को विशिष्ट स्थान पर प्रस्थापित करने में असमर्थ
|
||||
unlock.error.customPath.description.notSupported=यदि आप विशिष्ट स्थान का उपयोग जारी रखना चाहते हैं, तो कृपया प्राथमिकताओं पर जाएं और एक ग्रन्थ (वॉल्यूम) प्रकार चुनें जो इसका समर्थन करता हो। अन्यथा, तिजोरी के विकल्पों पर जाएं और एक समर्थित प्रस्थापित स्थान (माउंट पॉइंट) चुनें।
|
||||
unlock.error.customPath.description.notExists=विशिष्ट प्रस्थापित स्थान (कस्टम माउंट पाथ) मौजूद नहीं है. या तो इसे अपने स्थानीय फ़ाइल प्रणाली में बनाएं या तिजोरी के विकल्पों को बदलें।
|
||||
unlock.error.customPath.description.hideawayNotDir=तिजोरी खोलने के के लिए उपयोग की गई अस्थायी, छिपी हुई फ़ाइल "%3$s" को हटाया नहीं जा सका। कृपया फ़ाइल की जाँच करें और फिर इसे स्वतः हटा दें।
|
||||
unlock.error.customPath.description.couldNotBeCleaned=आपका तिजोरी "%s" स्थान पर स्थापित नहीं किया जा सका। कृपया पुनः प्रयास करें या कोई अलग रास्ता चुनें।
|
||||
unlock.error.title="%s" तिजोरी खोलना विफल रहा
|
||||
## Hub
|
||||
hub.noKeychain.message=उपकरण के कुंजी तक पहुंचने में असमर्थ
|
||||
hub.noKeychain.openBtn=प्राथमिकताएँ खोलें
|
||||
### Waiting
|
||||
hub.auth.message=प्रमाणन के लिए इंतज़ार कर रहे...
|
||||
hub.auth.description=आपको स्वचालित रूप से लॉगिन पृष्ठ पर पुनः निर्देशित किया जाना चाहिए।
|
||||
hub.auth.loginLink=पुनर्निर्देशित नहीं किया गया? इसे खोलने के लिए यहां क्लिक करें.
|
||||
### Receive Key
|
||||
hub.receive.message=अभी संसाधित किया जा रहा है
|
||||
### Register Device
|
||||
hub.register.message=नया उपकरण
|
||||
hub.register.nameLabel=डिवाइस का नाम
|
||||
hub.register.occupiedMsg=नाम पहले से प्रयोग में है
|
||||
hub.register.registerBtn=पुष्टि करें
|
||||
### Register Device Legacy
|
||||
### Registration Success
|
||||
hub.registerSuccess.unlockBtn=अनलॉक करें
|
||||
### Registration Failed
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=प्रवेश अस्वीकृत
|
||||
### Requires Account Initialization
|
||||
hub.requireAccountInit.message=कार्रवाई आवश्यक है
|
||||
hub.requireAccountInit.description.0=आगे बढ़ने के लिए, कृपया अपने आवश्यक चरणों को पूरा करें
|
||||
hub.requireAccountInit.description.2=.
|
||||
### License Exceeded
|
||||
|
||||
# Lock
|
||||
@@ -185,8 +216,12 @@ preferences.updates=नवीनीकरण
|
||||
preferences.updates.currentVersion=वर्तमान संस्करण: %s
|
||||
preferences.updates.checkNowBtn=अभी जाँचें
|
||||
preferences.updates.updateAvailable=संस्करण %s की तरफ नवीनीकरण उपलब्ध है।
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=हमें सपोर्ट करें
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.confirmBtn=हटाएँ
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -199,9 +234,6 @@ preferences.contribute=हमें सपोर्ट करें
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=बंद करें
|
||||
main.preferencesBtn.tooltip=प्राथमिकताएं
|
||||
main.supporterCertificateMissing.tooltip=कृपया दान पर विचार करें।
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=वॉल्ट को डालने के लिए यहाँ क्लिक करें।
|
||||
main.vaultlist.contextMenu.remove=हटाएँ...
|
||||
@@ -210,6 +242,7 @@ main.vaultlist.contextMenu.unlock=अनलॉक करें...
|
||||
main.vaultlist.contextMenu.unlockNow=अब अनलॉक करें
|
||||
main.vaultlist.contextMenu.vaultoptions=वॉल्ट के विकल्प दिखाए
|
||||
main.vaultlist.contextMenu.reveal=फोल्डर खोलें
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Cryptomator को अपनी फाइल्स सिराक्षित रखने को चुनने के लिए धन्यवाद। अगर आपको सहायता चाइये, तो हमारी गेटिंग स्टार्टेड गाइगाइड्स देखिये:
|
||||
@@ -277,4 +310,9 @@ quit.title=एप्लीकेशन को बंद करें
|
||||
# Forced Quit
|
||||
quit.forced.message=कुछ वॉल्ट्स लॉक नहीं हो पायी
|
||||
|
||||
# Update Reminder
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.preferencesBtn=प्राथमिकताएँ खोलें
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -115,8 +115,9 @@ unlock.success.revealBtn=Otkrij pogon
|
||||
### Waiting
|
||||
### Receive Key
|
||||
### Register Device
|
||||
hub.register.registerBtn=Potvrdi
|
||||
### Register Device Legacy
|
||||
### Registration Success
|
||||
hub.registerSuccess.unlockBtn=Otključaj
|
||||
### Registration Failed
|
||||
### Unauthorized
|
||||
### Requires Account Initialization
|
||||
@@ -212,7 +213,6 @@ preferences.interface.language.auto=Zadano sustavom
|
||||
preferences.interface.interfaceOrientation=Orijentacija sučelja
|
||||
preferences.interface.interfaceOrientation.ltr=S lijeva na desno
|
||||
preferences.interface.interfaceOrientation.rtl=S desna na lijevo
|
||||
preferences.interface.showMinimizeButton=Prikaži dugme za smanjivanje
|
||||
preferences.interface.showTrayIcon=Pokaži ikonu u traci (zahtjeva ponovno pokretanje)
|
||||
## Volume
|
||||
preferences.volume=Virtualni pogon
|
||||
@@ -223,12 +223,16 @@ 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
|
||||
preferences.contribute.noCertificate=Podržite Cryptomator i primite certifikat podržavatelja. On je kao licenčni ključ, ali za fenomenalne ljude koji koriste slobodni softver. ;-)
|
||||
preferences.contribute.getCertificate=Još ga nemate? Naučite kako ga dobiti.
|
||||
preferences.contribute.promptText=Zalijepi certifikat podržavatelja ovdje
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.confirmBtn=Ukloni
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -262,11 +266,6 @@ stats.write.accessCount=Ukupno pisanja: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Zatvori
|
||||
main.minimizeBtn.tooltip=Smanji
|
||||
main.preferencesBtn.tooltip=Postavke
|
||||
main.debugModeEnabled.tooltip=Način otklanjanja pogrešaka je omogućen
|
||||
main.supporterCertificateMissing.tooltip=Molimo razmislite o doniranju
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Pritisnite ovdje da biste dodali trezor
|
||||
main.vaultlist.contextMenu.remove=Ukloni…
|
||||
@@ -275,7 +274,7 @@ main.vaultlist.contextMenu.unlock=Otključaj…
|
||||
main.vaultlist.contextMenu.unlockNow=Otključaj sada
|
||||
main.vaultlist.contextMenu.vaultoptions=Prikaži opcije trezora
|
||||
main.vaultlist.contextMenu.reveal=Otkrij pogon
|
||||
main.vaultlist.addVaultBtn=Dodaj
|
||||
##Notificaition
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Hvala što ste odabrali Cryptomator za zaštitu Vaših datoteka. Ukoliko trebate pomoć, provjerite naše vodiče za početak rada:
|
||||
@@ -379,4 +378,8 @@ quit.lockAndQuitBtn=Zaključaj i napusti
|
||||
|
||||
# Forced Quit
|
||||
|
||||
# Update Reminder
|
||||
# Update Reminder
|
||||
|
||||
#Dokany Support End
|
||||
|
||||
# Share Vault
|
||||
|
||||
@@ -47,6 +47,7 @@ addvaultwizard.new.nameInstruction=Válasszon egy nevet az új széf számára
|
||||
addvaultwizard.new.namePrompt=A széf neve
|
||||
### Location
|
||||
addvaultwizard.new.locationInstruction=Hova mentse a Cryptomator a széf titkosított fájljait?
|
||||
addvaultwizard.new.locationLoading=Helyi fájlrendszer ellenőrzése alapértelmezett felhő tárolási könyvtárakra…
|
||||
addvaultwizard.new.locationLabel=Tárolási hely
|
||||
addvaultwizard.new.locationPrompt=…
|
||||
addvaultwizard.new.directoryPickerLabel=Egyedi hely
|
||||
@@ -141,6 +142,9 @@ unlock.error.customPath.description.hideawayNotDir=A feloldáshoz használt, "%3
|
||||
unlock.error.customPath.description.couldNotBeCleaned=A széfet nem lehetett a "%s" elérési útvonalra csatlakoztatni. Kérjük, próbálja meg újra, vagy válasszon másik elérési útvonalat.
|
||||
unlock.error.customPath.description.notEmptyDir=A megadott "%s" elérési útvonal nem egy üres mappa. Kérjük, válasszon egy üres mappát, és próbálja meg újra.
|
||||
unlock.error.customPath.description.generic=Egyéni csatolási útvonalat választott ehhez a széfhez, de használatakor ez a hibaüzenet érkezett: %2$s
|
||||
unlock.error.restartRequired.message=Nem lehet feloldani a széfet
|
||||
unlock.error.restartRequired.description=Módosítsa a kötet típusát a széf beállításaiban, vagy indítsa újra a Cryptomator-t.
|
||||
unlock.error.title=A(z) „%s” feloldása sikertelen
|
||||
## Hub
|
||||
hub.noKeychain.message=Nem lehet az eszközkulcshoz hozzáférni
|
||||
hub.noKeychain.description=Hogy feloldja a Hub széfeket, egy eszközkulcs szükséges, mely egy kulcslánccal van biztosítva. A folytatáshoz engedélyezze a következőt: “%s” és válasszon egy kulcsláncot a beállításokban.
|
||||
@@ -154,22 +158,29 @@ hub.receive.message=Válasz feldolgozása…
|
||||
hub.receive.description=Cryptomator fogadja és feldolgozza a Hub válaszát. Kérem, várjon.
|
||||
### Register Device
|
||||
hub.register.message=Új eszköz
|
||||
hub.register.description=Ez az első Hub-hozzáférés erről az eszközről. Kérjük, engedélyezd a Fiókkulcsoddal.
|
||||
hub.register.description=Ez az első Hub hozzáférés erről az eszközről. Kérem, regisztrálja az Account Key használatával.
|
||||
hub.register.nameLabel=Készülék neve
|
||||
hub.register.invalidAccountKeyLabel=Érvénytelen fiókkulcs
|
||||
hub.register.occupiedMsg=Ez a név már használatban van
|
||||
hub.register.registerBtn=Megerősítés
|
||||
hub.register.registerBtn=Regisztráció
|
||||
### Register Device Legacy
|
||||
hub.register.legacy.occupiedMsg=Név már használatban van
|
||||
hub.register.legacy.description=Ez az első Hub hozzáférés erről az eszközről. Kérem, regisztrálja.
|
||||
### Registration Success
|
||||
hub.registerSuccess.message=Eszköz elnevezve
|
||||
hub.registerSuccess.description=A széf hozzáféréséhez a széf tulajdonosának hitelesítenie kell az eszközét.
|
||||
hub.registerSuccess.message=Az eszköz regisztrálva
|
||||
hub.registerSuccess.description=Az eszköze sikeresen regisztrálva. Most már folytathatja a széf feloldását.
|
||||
hub.registerSuccess.unlockBtn=Feloldás
|
||||
hub.registerSuccess.legacy.description=A széfhez való hozzáféréshez az eszközének a széf tulajdonosától további engedélyt kell kapnia.
|
||||
### Registration Failed
|
||||
hub.registerFailed.message=Az eszköz elnevezése sikertelen volt
|
||||
hub.registerFailed.description=Hiba állt fel az elnevezési folyamatban. További részletekért tekintse meg az alkalmazásnaplót.
|
||||
hub.registerFailed.message=Az eszköz regisztrációja sikertelen
|
||||
hub.registerFailed.description.generic=Hiba történt a regisztrációs folyamat során. További részletekért nézze meg az alkalmazás naplóját.
|
||||
hub.registerFailed.description.deviceAlreadyExists=Ez az eszköz már egy másik felhasználóhoz van regisztrálva. Próbáljon meg felhasználói fiókot váltani, vagy használjon egy másik eszközt.
|
||||
### Unauthorized
|
||||
hub.unauthorized.message=Hozzáférés megtagadva
|
||||
hub.unauthorized.description=Eszköze még nem kapott engedélyt ehhez a széfhez. Kérje a széf tulajdonosát, hogy engedélyezze a hozzáférést.
|
||||
### Requires Account Initialization
|
||||
hub.requireAccountInit.message=Beavatkozás szükséges
|
||||
hub.requireAccountInit.description.0=A folytatáshoz kérlek töltsd ki a szükséges lépéseket a te
|
||||
hub.requireAccountInit.description.1=Hub felhasználói profilodban
|
||||
hub.requireAccountInit.description.2=.
|
||||
### License Exceeded
|
||||
hub.invalidLicense.message=Érvénytelen Hub licenc
|
||||
@@ -276,6 +287,7 @@ preferences.general.debugLogging=Hibakeresési naplózás engedélyezése
|
||||
preferences.general.debugDirectory=Naplófájlok megjelenítése
|
||||
preferences.general.autoStart=Cryptomator indítása a rendszerrel együtt
|
||||
preferences.general.keychainBackend=Itt tárolja a jelszavakat
|
||||
preferences.general.quickAccessService=Adja a feloldott széfeket a gyors elérési területhez
|
||||
## Interface
|
||||
preferences.interface=Kezelőfelület
|
||||
preferences.interface.theme=Megjelenés
|
||||
@@ -288,13 +300,15 @@ preferences.interface.language.auto=Rendszer alapértelmezett
|
||||
preferences.interface.interfaceOrientation=Felhasználói felület tájolása
|
||||
preferences.interface.interfaceOrientation.ltr=Balról jobbra
|
||||
preferences.interface.interfaceOrientation.rtl=Jobbról balra
|
||||
preferences.interface.showMinimizeButton=Kicsinyítés ikon megjelenítése
|
||||
preferences.interface.showTrayIcon=Tálca ikon megjelenítése (újraindítás szükséges)
|
||||
preferences.interface.compactMode=Kompakt széflista engedélyezése
|
||||
## Volume
|
||||
preferences.volume=Virtuális meghajtó
|
||||
preferences.volume.type=Alapértelmezett kötet típus
|
||||
preferences.volume.type.automatic=Automatikus
|
||||
preferences.volume.docsTooltip=További információért a kötet típusokról kattintson ide, hogy megnyissa a dokumentációt.
|
||||
preferences.volume.fuseRestartRequired=A változtatások alkalmazásához újra kell indítania a Cryptomatort.
|
||||
preferences.volume.tcp.port=Alapértelmezett TCP port
|
||||
preferences.volume.supportedFeatures=A kiválaszott kötet típus az alábbi funkciókat támogatja:
|
||||
preferences.volume.feature.mountAuto=Automatikus csatlakozási pont választás
|
||||
preferences.volume.feature.mountToDir=Egyéni mappa csatlakozási pontként
|
||||
@@ -307,12 +321,29 @@ 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ő.
|
||||
preferences.updates.lastUpdateCheck=Utolsó ellenőrzés: %s
|
||||
preferences.updates.lastUpdateCheck.never=soha
|
||||
preferences.updates.lastUpdateCheck.recently=mostanában
|
||||
preferences.updates.lastUpdateCheck.daysAgo=%s nappal ezelőtt
|
||||
preferences.updates.lastUpdateCheck.hoursAgo=%s órával ezelőtt
|
||||
preferences.updates.checkFailed=A frissítések keresése sikertelen. Kérem, ellenőrizze az internetkapcsolatát, vagy próbálja meg később újra.
|
||||
preferences.updates.upToDate=A Cryptomator naprakész.
|
||||
|
||||
## Contribution
|
||||
preferences.contribute=Támogasson bennünket
|
||||
preferences.contribute.registeredFor=Támogatói igazolás regisztrálva neki: %s
|
||||
preferences.contribute.noCertificate=Ha támogatja a "Cryptomator"-t, kaphat egy "támogatói igazolást". Az olyasmi mint egy licenckulcs klassz embereknek, akik ingyenes szoftvert használnak. ;-)
|
||||
preferences.contribute.getCertificate=Még nincs? Ismerje meg, hogyan szerezheti meg.
|
||||
preferences.contribute.promptText=Ide illessze be támogatói igazolása kódját
|
||||
preferences.contribute.thankYou=Köszönjük, hogy támogatja a Cryptomator nyílt forráskódú fejlesztését!
|
||||
preferences.contribute.donate=Támogatás
|
||||
preferences.contribute.sponsor=Szponzor
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeCert.title=Tanúsítvány eltávolítása
|
||||
removeCert.message=Eltávolítja a támogatói tanúsítványt?
|
||||
removeCert.description=A Cryptomator alapvető funkcióit ez nem érinti. Sem a széfekhez való hozzáférés nem korlátozott, sem a biztonsági szint nem csökken.
|
||||
removeCert.confirmBtn=Eltávolítás
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
@@ -354,11 +385,6 @@ stats.access.total=Összes hozzáférés: %d
|
||||
|
||||
|
||||
# Main Window
|
||||
main.closeBtn.tooltip=Bezárás
|
||||
main.minimizeBtn.tooltip=Minimalizálás
|
||||
main.preferencesBtn.tooltip=Beállítások
|
||||
main.debugModeEnabled.tooltip=A hibakeresési mód aktiválva van
|
||||
main.supporterCertificateMissing.tooltip=Kérjük, fontolja meg az adományozást
|
||||
## Vault List
|
||||
main.vaultlist.emptyList.onboardingInstruction=Kattintson ide egy széf hozzáadásához
|
||||
main.vaultlist.contextMenu.remove=Eltávolítás…
|
||||
@@ -367,9 +393,11 @@ main.vaultlist.contextMenu.unlock=Feloldás…
|
||||
main.vaultlist.contextMenu.unlockNow=Azonnali feloldás
|
||||
main.vaultlist.contextMenu.vaultoptions=Széf beállítások
|
||||
main.vaultlist.contextMenu.reveal=Széf megjelenítése
|
||||
main.vaultlist.addVaultBtn=Hozzáadás
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Új széf...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Meglévő széf...
|
||||
main.vaultlist.addVaultBtn.menuItemNew=Új széf létrehozása...
|
||||
main.vaultlist.addVaultBtn.menuItemExisting=Meglévő széf megnyitása...
|
||||
##Notificaition
|
||||
main.notification.updateAvailable=Frissítés elérhető.
|
||||
main.notification.support=Cryptomator támogatása.
|
||||
## Vault Detail
|
||||
### Welcome
|
||||
main.vaultDetail.welcomeOnboarding=Köszönjük, hogy a Cryptomator programot választotta a fájlai védelmére. Ha segítségre van szüksége, akkor olvassa el a kezdő útmutatónk lépéseit:
|
||||
@@ -379,6 +407,7 @@ main.vaultDetail.unlockBtn=Feloldás…
|
||||
main.vaultDetail.unlockNowBtn=Azonnali feloldás
|
||||
main.vaultDetail.optionsBtn=Széf beállítások
|
||||
main.vaultDetail.passwordSavedInKeychain=Jelszó mentve
|
||||
main.vaultDetail.share=Megosztás…
|
||||
### Unlocked
|
||||
main.vaultDetail.unlockedStatus=FELOLDVA
|
||||
main.vaultDetail.accessLocation=A széf tartalma itt érhető el:
|
||||
@@ -433,6 +462,7 @@ vaultOptions.general.startHealthCheckBtn=Épség-ellenőrzés indítása
|
||||
|
||||
## Mount
|
||||
vaultOptions.mount=Felcsatolás
|
||||
vaultOptions.mount.info=Nyissa meg a virtuális meghajtó beállításait az alapértelmezett beállítások módosításához.
|
||||
vaultOptions.mount.readonly=Csak-olvasható
|
||||
vaultOptions.mount.customMountFlags=Egyedi csatolási paraméterek
|
||||
vaultOptions.mount.winDriveLetterOccupied=foglalt
|
||||
@@ -442,6 +472,10 @@ vaultOptions.mount.mountPoint.driveLetter=Használja a kiválasztott meghajtó b
|
||||
vaultOptions.mount.mountPoint.custom=Egyéni könyvtár használata
|
||||
vaultOptions.mount.mountPoint.directoryPickerButton=Kiválaszt…
|
||||
vaultOptions.mount.mountPoint.directoryPickerTitle=Válasszon könyvtárat
|
||||
vaultOptions.mount.volumeType.default=Alapértelmezett (%s)
|
||||
vaultOptions.mount.volumeType.restartRequired=Ahhoz, hogy ezt a kötet típust használhassa, újra kell indítania a Cryptomator-t.
|
||||
vaultOptions.mount.volume.tcp.port=TCP port
|
||||
vaultOptions.mount.volume.type=Kötet típus
|
||||
## Master Key
|
||||
vaultOptions.masterkey=Jelszó
|
||||
vaultOptions.masterkey.changePasswordBtn=Jelszó megváltoztatása
|
||||
@@ -511,4 +545,30 @@ updateReminder.message=Frissítések ellenőrzése?
|
||||
updateReminder.description=Maradjon naprakész az új funkciókkal, hibajavításokkal és biztonsági fejlesztésekkel. Javasoljuk, hogy automatikusan ellenőrizze a frissítéseket.
|
||||
updateReminder.notNow=Most nem
|
||||
updateReminder.yesOnce=Igen, egyszer
|
||||
updateReminder.yesAutomatically=Igen, automatikusan
|
||||
updateReminder.yesAutomatically=Igen, automatikusan
|
||||
|
||||
#Dokany Support End
|
||||
dokanySupportEnd.title=Értesítés elavulásról
|
||||
dokanySupportEnd.message=Vége a Dokany támogatásának
|
||||
dokanySupportEnd.description=A Cryptomator nem támogatja tovább a Dokany kötettípust. A beállítások az alapértelmezett kötettípus használatára lettek állítva. Az alapértelmezett típust a beállítások közt tekintheted meg.
|
||||
dokanySupportEnd.preferencesBtn=Beállítások megnyitása
|
||||
|
||||
# Share Vault
|
||||
shareVault.title=Széf megosztása
|
||||
shareVault.message=Szeretné megosztani a széfét másokkal?
|
||||
shareVault.description=Mindig legyen óvatos, amikor másokkal osztja meg a széfét. Röviden, kövesse az alábbi lépéseket:
|
||||
shareVault.instruction.1=Ossza meg a titkosított széf mappájának hozzáférését felhőalapú tárolón keresztül.
|
||||
shareVault.instruction.2=2. Ossza meg a széf jelszavát biztonságos módon.
|
||||
shareVault.remarkBestPractices=További információkért tekintse meg a legjobb gyakorlatokra vonatkozó javaslatokat a dokumentációnkban.
|
||||
shareVault.docsTooltip=Nyissa meg a dokumentációt, hogy többet megtudjon a széfek megosztásáról.
|
||||
shareVault.hubAd.description=A biztonságos mód csapatokban való munkavégzéshez
|
||||
shareVault.hubAd.keyManagement=• Nullaismeretű (Zero-knowledge) kulcskezelés
|
||||
shareVault.hubAd.authentication=• Erős hitelesítés
|
||||
shareVault.hubAd.encryption=• Végponttól végpontig terjedő titkosítás
|
||||
shareVault.visitHub=Látogassa meg a Cryptomator Hubot
|
||||
|
||||
shareVault.hub.message=Hogyan osszon meg egy Hub széfet
|
||||
shareVault.hub.description=Ahhoz, hogy megossza a széf tartalmát egy másik csapattaggal, két lépést kell végrehajtania:
|
||||
shareVault.hub.instruction.1=Ossza meg a titkosított széf mappájának hozzáférését felhőalapú tárolón keresztül.
|
||||
shareVault.hub.instruction.2=2. Adjon hozzáférést a csapattagnak a Cryptomator Hubban.
|
||||
shareVault.hub.openHub=Nyissa meg a Cryptomator Hubot
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user