Compare commits

..

27 Commits

Author SHA1 Message Date
Armin Schrenk
c0f3facab8 correct typos 2025-03-21 15:45:04 +01:00
Armin Schrenk
b9512c9e93 cleanup 2025-03-21 15:37:04 +01:00
Armin Schrenk
dd724220f8 enable clear() again 2025-03-21 15:31:58 +01:00
Armin Schrenk
94410f1839 more renaming 2025-03-21 15:24:40 +01:00
Armin Schrenk
cc8aa00326 Renamed classes 2025-03-21 15:03:31 +01:00
Armin Schrenk
e8e2fcb0b3 rename EventRegistry to Aggregator 2025-03-21 14:51:53 +01:00
Armin Schrenk
151b35355d no size restriction/lru needed 2025-03-21 14:49:19 +01:00
Armin Schrenk
37d5353f77 run the eventUpdate from app start 2025-03-21 13:46:20 +01:00
Armin Schrenk
7b6953445f remove comments 2025-03-21 13:45:59 +01:00
Armin Schrenk
fcd3db63ce use a preemptive update status to not miss updates 2025-03-21 13:38:00 +01:00
Armin Schrenk
d67085d57d doodles 2025-03-20 16:41:30 +01:00
Armin Schrenk
1f60d9f5e8 remove notification, if eventView is focused 2025-03-19 15:13:51 +01:00
Armin Schrenk
5378769467 adjust update-indicator 2025-03-19 15:12:40 +01:00
Armin Schrenk
913ed5e109 removed unused class 2025-03-19 14:53:24 +01:00
Armin Schrenk
f4cfe19fdc more cleanup 2025-03-19 12:41:45 +01:00
Armin Schrenk
a001dfd8a8 add equals to FileSystemEventBucket to ensure correct removal in collections 2025-03-19 12:30:23 +01:00
Armin Schrenk
893a4bcae9 the great rename 2025-03-19 12:25:26 +01:00
Armin Schrenk
e61fb74367 removed unused classes 2025-03-19 12:06:02 +01:00
Armin Schrenk
fbbbc1cb40 cleanup 2025-03-19 11:58:04 +01:00
Armin Schrenk
f27f3c46c1 decouple eventMap insertion from event happening (to not spam FX thread) 2025-03-19 11:55:29 +01:00
Armin Schrenk
83b557b6be removed dead code 2025-03-18 18:02:55 +01:00
Armin Schrenk
32a0df06d0 move eventMap to event package 2025-03-18 18:02:46 +01:00
Armin Schrenk
5350e07f62 renamed VaultEventsMap.Key parameters for clarity 2025-03-18 17:57:15 +01:00
Armin Schrenk
cc5c46743b Refactor EventMap:
* renamed to VaultEventsMap
* split between boilerplate and buissness logic (ObservableMapDecorator)
* add LRU cache
* fixed VaultEvent compareTo method
2025-03-18 17:55:32 +01:00
Armin Schrenk
bc7f3fe7db more renaming 2025-03-18 12:17:39 +01:00
Armin Schrenk
750ca3f39c also key the eventMap for vault 2025-03-18 12:13:25 +01:00
Armin Schrenk
2bbffc3623 rename eventMap to make purpose clearer 2025-03-18 12:10:44 +01:00
111 changed files with 479 additions and 3174 deletions

View File

@@ -16,10 +16,6 @@
- Suggest your change by [submitting a new issue](https://github.com/cryptomator/cryptomator/issues/new/choose) and start writing code.
## Do you intend to add a new translation or change an existing one?
Translations are not managed directly in this repository. Instead, we use [Crowdin](https://translate.cryptomator.org/), which automatically synchronizes translations with this repository. If you want to help us with translations, please visit our translation project on Crowdin.
## Code of Conduct
Help us keep Cryptomator open and inclusive. Please read and follow our [Code of Conduct](https://github.com/cryptomator/cryptomator/blob/develop/.github/CODE_OF_CONDUCT.md).

View File

@@ -11,7 +11,7 @@ on:
env:
JAVA_DIST: 'temurin'
JAVA_VERSION: '23.0.2'
JAVA_VERSION: '23.0.1+11'
jobs:
get-version:
@@ -29,12 +29,12 @@ jobs:
include:
- os: ubuntu-latest
appimage-suffix: x86_64
openjfx-url: 'https://download2.gluonhq.com/openjfx/23.0.2/openjfx-23.0.2_linux-x64_bin-jmods.zip'
openjfx-sha: '063baebc6922e4a89c94b9dfb7a4f53e59e8d6fec400d4e670b31bc2ab324dec'
openjfx-url: 'https://download2.gluonhq.com/openjfx/23.0.1/openjfx-23.0.1_linux-x64_bin-jmods.zip'
openjfx-sha: '2164bca470bf70a5e2764645e2078ba7f787b274e5be3d7df30d87c5bb62bba6'
- os: ubuntu-24.04-arm
appimage-suffix: aarch64
openjfx-url: 'https://download2.gluonhq.com/openjfx/23.0.2/openjfx-23.0.2_linux-aarch64_bin-jmods.zip'
openjfx-sha: '9bbedaeae1590b69e2b22237bda310936df33e344dbc243bea2e86acaab3a0d8'
openjfx-url: 'https://download2.gluonhq.com/openjfx/23.0.1/openjfx-23.0.1_linux-aarch64_bin-jmods.zip'
openjfx-sha: '09c92fa9fa0b82adefd88640a14ebb2a49e5f3f733a57d1542f5590d060ffe1b'
steps:
- uses: actions/checkout@v4
- name: Setup Java

View File

@@ -13,48 +13,15 @@ on:
description: "Url to the file to upload"
required: true
type: string
avast:
description: "Upload to Avast"
required: false
type: boolean
default: false
kaspersky:
description: "Upload to Kaspersky"
required: false
type: boolean
default: false
jobs:
download-file:
name: Downloads the file into the VM
allowlist:
name: Anti Virus Allowlisting
runs-on: ubuntu-latest
outputs:
fileName: ${{ steps.extractName.outputs.fileName}}
steps:
- name: Extract file name
id: extractName
run: |
url="${{ inputs.url }}"
echo "fileName=${url##*/}" >> $GITHUB_OUTPUT
- name: Download file
run: curl --remote-name ${{ inputs.url }} -L -o ${{steps.extractName.outputs.fileName}}
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ steps.extractName.outputs.fileName }}
path: ${{ steps.extractName.outputs.fileName }}
if-no-files-found: error
allowlist-kaspersky:
name: Anti Virus Allowlisting Kaspersky
runs-on: ubuntu-latest
needs: download-file
if: github.event_name == 'workflow_call' || inputs.kaspersky
steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: ${{ needs.download-file.outputs.fileName }}
path: upload
run: |
curl --remote-name ${{ inputs.url }} -L
- name: Upload to Kaspersky
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
with:
@@ -63,26 +30,11 @@ jobs:
port: 990
username: ${{ secrets.ALLOWLIST_KASPERSKY_USERNAME }}
password: ${{ secrets.ALLOWLIST_KASPERSKY_PASSWORD }}
local-dir: ./upload/
allowlist-avast:
name: Anti Virus Allowlisting Avast
runs-on: ubuntu-latest
needs: download-file
if: github.event_name == 'workflow_call' || inputs.avast
steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: ${{ needs.download-file.outputs.fileName }}
path: upload
- name: Upload to Avast
uses: wlixcc/SFTP-Deploy-Action@v1.2.5
- name: Upload to Avast
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
with:
protocol: ftp
server: whitelisting.avast.com
port: 22
port: 21
username: ${{ secrets.ALLOWLIST_AVAST_USERNAME }}
password: ${{ secrets.ALLOWLIST_AVAST_PASSWORD }}
ssh_private_key: ''
sftp_only: true
local_path: './upload/*'
remote_path: '/data'
password: ${{ secrets.ALLOWLIST_AVAST_PASSWORD }}

View File

@@ -17,13 +17,13 @@ on:
env:
JAVA_DIST: 'temurin'
JAVA_VERSION: '23.0.2+7'
JAVA_VERSION: '23.0.1+11'
COFFEELIBS_JDK: 23
COFFEELIBS_JDK_VERSION: '23.0.2+7-0ppa1'
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/23.0.2/openjfx-23.0.2_linux-x64_bin-jmods.zip'
OPENJFX_JMODS_AMD64_HASH: '063baebc6922e4a89c94b9dfb7a4f53e59e8d6fec400d4e670b31bc2ab324dec'
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/23.0.2/openjfx-23.0.2_linux-aarch64_bin-jmods.zip'
OPENJFX_JMODS_AARCH64_HASH: '9bbedaeae1590b69e2b22237bda310936df33e344dbc243bea2e86acaab3a0d8'
COFFEELIBS_JDK_VERSION: '23.0.1+11-0ppa1'
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/23.0.1/openjfx-23.0.1_linux-x64_bin-jmods.zip'
OPENJFX_JMODS_AMD64_HASH: '2164bca470bf70a5e2764645e2078ba7f787b274e5be3d7df30d87c5bb62bba6'
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/23.0.1/openjfx-23.0.1_linux-aarch64_bin-jmods.zip'
OPENJFX_JMODS_AARCH64_HASH: '09c92fa9fa0b82adefd88640a14ebb2a49e5f3f733a57d1542f5590d060ffe1b'
jobs:
build:

View File

@@ -15,7 +15,7 @@ on:
env:
JAVA_DIST: 'temurin'
JAVA_VERSION: '23.0.2+7'
JAVA_VERSION: '23.0.1+11'
jobs:
get-version:
@@ -35,8 +35,8 @@ jobs:
architecture: x64
output-suffix: x64
fuse-lib: macFUSE
openjfx-url: 'https://download2.gluonhq.com/openjfx/23.0.2/openjfx-23.0.2_osx-x64_bin-jmods.zip'
openjfx-sha: '5e6c65c065eea22430c0eab36f37a5985eb8ad99e19e8772262021740d338f68'
openjfx-url: 'https://download2.gluonhq.com/openjfx/23.0.1/openjfx-23.0.1_osx-x64_bin-jmods.zip'
openjfx-sha: '8857965975c464a0e5d57709292ce357d0ebb39f6168c41d5ca38301e42c3c8e'
steps:
- uses: actions/checkout@v4
- name: Setup Java

View File

@@ -16,7 +16,7 @@ on:
env:
JAVA_DIST: 'temurin'
JAVA_VERSION: '23.0.2+7'
JAVA_VERSION: '23.0.1+11'
jobs:
get-version:
@@ -36,8 +36,8 @@ jobs:
architecture: aarch64
output-suffix: arm64
fuse-lib: FUSE-T
openjfx-url: 'https://download2.gluonhq.com/openjfx/23.0.2/openjfx-23.0.2_osx-aarch64_bin-jmods.zip'
openjfx-sha: 'c690cc642a3924cf56622951f478ba57aec9ce09063761f800c3319331bed3fc'
openjfx-url: 'https://download2.gluonhq.com/openjfx/23.0.1/openjfx-23.0.1_osx-aarch64_bin-jmods.zip'
openjfx-sha: 'a800724a1f3e6757ecfa0bd5bf7ed64d2e6a7a3f5b3522650a70b8cfc7782fb6'
steps:
- uses: actions/checkout@v4
- name: Setup Java

View File

@@ -16,7 +16,7 @@ on:
env:
JAVA_DIST: 'zulu'
JAVA_VERSION: '23.0.2+7'
JAVA_VERSION: '23.0.1+11'
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/23.0.1/openjfx-23.0.1_windows-x64_bin-jmods.zip'
OPENJFX_JMODS_AMD64_HASH: 'ee176dcee3bd78bde7910735bd67f67c792882f5b89626796ae06f7a1c0119d3'
WINFSP_MSI: 'https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi'
@@ -40,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
@@ -391,7 +394,7 @@ jobs:
allowlist-exe:
uses: ./.github/workflows/av-whitelist.yml
needs: [publish, allowlist-msi]
needs: [publish]
with:
url: ${{ needs.publish.outputs.download-url-exe }}
secrets: inherit

View File

@@ -23,12 +23,12 @@ mvn -B -f ../../../pom.xml clean package -Plinux -DskipTests -Djavafx.platform=l
cp ../../../LICENSE.txt ../../../target
cp ../../../target/cryptomator-*.jar ../../../target/mods
JAVAFX_VERSION=23.0.2
JAVAFX_VERSION=22.0.2
JAVAFX_ARCH="x64"
JAVAFX_JMODS_SHA256='063baebc6922e4a89c94b9dfb7a4f53e59e8d6fec400d4e670b31bc2ab324dec'
JAVAFX_JMODS_SHA256='2164bca470bf70a5e2764645e2078ba7f787b274e5be3d7df30d87c5bb62bba6'
if [ "${CPU_ARCH}" = "aarch64" ]; then
JAVAFX_ARCH="aarch64"
JAVAFX_JMODS_SHA256='9bbedaeae1590b69e2b22237bda310936df33e344dbc243bea2e86acaab3a0d8'
JAVAFX_JMODS_SHA256='09c92fa9fa0b82adefd88640a14ebb2a49e5f3f733a57d1542f5590d060ffe1b'
fi
# download javaFX jmods

View File

@@ -83,21 +83,6 @@
</content_rating>
<releases>
<release date="2025-05-15" version="1.16.2">
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.16.2</url>
</release>
<release date="2025-04-30" version="1.16.1">
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.16.1</url>
</release>
<release date="2025-04-29" version="1.16.0">
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.16.0</url>
</release>
<release date="2025-04-09" version="1.15.3">
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.15.3</url>
</release>
<release date="2025-04-04" version="1.15.2">
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.15.2</url>
</release>
<release date="2025-02-05" version="1.15.1">
<url type="details">https://github.com/cryptomator/cryptomator/releases/1.15.1</url>
</release>

View File

@@ -1,16 +1,12 @@
<svg height="16" viewBox="0 0 42 42" width="16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">
.ColorScheme-Text {
color:#222222;
}
.ColorScheme-Highlight {
color:#49B04A;
}
</style>
</defs>
<g fill-rule="evenodd">
<path d="m15.591 35.824c-.019.009-.936.775-1.458 1.208a.418.418 0 0 1 -.627-.111 9.322 9.322 0 0 1 -.3-5.974 15.843 15.843 0 0 0 2.894 2.043c.051 1.03-.161 2.644-.509 2.834zm6.409-6.824h-2l.5-5a2 2 0 1 1 1 0zm-14.544-3.241.744-1.366a1.579 1.579 0 0 0 -.019-1.557l.653-1.2c.2.014-.03-.113.165-.14.051-.217-.051-.336 0-.5a3.269 3.269 0 0 0 0-1.5 7.151 7.151 0 0 1 0-3 2.366 2.366 0 0 0 -2.378 1.448 2.409 2.409 0 0 0 .229 2.661l-.7 1.278a1.779 1.779 0 0 0 -1.317.891l-.741 1.372a1.577 1.577 0 0 0 -.019 1.487 3.028 3.028 0 0 0 -2.746 1.525 2.648 2.648 0 0 0 .044 2.631.748.748 0 0 0 .981.266.656.656 0 0 0 .284-.92 1.37 1.37 0 0 1 -.023-1.361 1.6 1.6 0 0 1 2.079-.63 1.408 1.408 0 0 1 .672 1.95 1.546 1.546 0 0 1 -1.2.78.688.688 0 0 0 -.636.749.707.707 0 0 0 .717.6.789.789 0 0 0 .082 0 2.989 2.989 0 0 0 2.322-1.513 2.669 2.669 0 0 0 -.377-3.084 1.767 1.767 0 0 0 1.184-.867zm13.544-10.759a13.013 13.013 0 0 1 5-1 21.6 21.6 0 0 1 4.5.5 9.312 9.312 0 0 0 -9.5-8.5c-5.794 0-9.176 4-9.5 8.5a21.858 21.858 0 0 1 4.5-.5 12.819 12.819 0 0 1 5 1zm3.5-5c1.209 0 2.5.866 2.5 2h-5c0-1.134 1.291-2 2.5-2zm-7 0c1.209 0 2.5.866 2.5 2h-5c0-1.134 1.291-2 2.5-2zm14.473 6a8.067 8.067 0 0 0 -8.08 8v2.141a3.891 3.891 0 0 0 -2.893 3.734v5.125a23.166 23.166 0 0 1 -4.174-1.623 7.857 7.857 0 0 1 -.027.878 3.263 3.263 0 0 1 -.729 2.074l-1.794 1.483a.379.379 0 0 1 -.276.188h-4c-1.324 0-2.346-1.336-2.653-3.343a7.058 7.058 0 0 1 .234-3.18 3.477 3.477 0 0 1 1.636-2.157 1.868 1.868 0 0 1 .783-.32h1.5a8.035 8.035 0 0 1 -1.5-5 11.1 11.1 0 0 1 .5-3 2.519 2.519 0 0 0 0-1.5 13.272 13.272 0 0 1 -.5-3.5c6.687-1.936 11 0 11 0s4.319-1.955 11 0" class="ColorScheme-Text" fill="currentColor"/>
<path d="m39 28h-10v-4a3.13 3.13 0 0 1 3-3 3.087 3.087 0 0 1 3 3v1a1.034 1.034 0 0 0 1 1h1a1.034 1.034 0 0 0 1-1v-1a6 6 0 0 0 -12 0v4h-1a2.073 2.073 0 0 0 -2 2v6a2.073 2.073 0 0 0 2 2h14a2.073 2.073 0 0 0 2-2v-6a2.073 2.073 0 0 0 -2-2zm-5.391 5.94a1.609 1.609 0 0 1 -3.217 0v-1.876a1.609 1.609 0 0 1 3.217 0z" class="ColorScheme-Highlight" fill="currentColor"/>
<style
id="current-color-scheme" type="text/css">
.ColorScheme-Text {
color:#232629;
}
</style>
<g fill-rule="evenodd" style="fill:#f2f2f2;fill-opacity:1" class="ColorScheme-Text" fill="currentColor">
<path d="m15.591 35.824c-.019.009-.936.775-1.458 1.208a.418.418 0 0 1 -.627-.111 9.322 9.322 0 0 1 -.3-5.974 15.843 15.843 0 0 0 2.894 2.043c.051 1.03-.161 2.644-.509 2.834zm6.409-6.824h-2l.5-5a2 2 0 1 1 1 0zm-14.544-3.241.744-1.366a1.579 1.579 0 0 0 -.019-1.557l.653-1.2c.2.014-.03-.113.165-.14.051-.217-.051-.336 0-.5a3.269 3.269 0 0 0 0-1.5 7.151 7.151 0 0 1 0-3 2.366 2.366 0 0 0 -2.378 1.448 2.409 2.409 0 0 0 .229 2.661l-.7 1.278a1.779 1.779 0 0 0 -1.317.891l-.741 1.372a1.577 1.577 0 0 0 -.019 1.487 3.028 3.028 0 0 0 -2.746 1.525 2.648 2.648 0 0 0 .044 2.631.748.748 0 0 0 .981.266.656.656 0 0 0 .284-.92 1.37 1.37 0 0 1 -.023-1.361 1.6 1.6 0 0 1 2.079-.63 1.408 1.408 0 0 1 .672 1.95 1.546 1.546 0 0 1 -1.2.78.688.688 0 0 0 -.636.749.707.707 0 0 0 .717.6.789.789 0 0 0 .082 0 2.989 2.989 0 0 0 2.322-1.513 2.669 2.669 0 0 0 -.377-3.084 1.767 1.767 0 0 0 1.184-.867zm13.544-10.759a13.013 13.013 0 0 1 5-1 21.6 21.6 0 0 1 4.5.5 9.312 9.312 0 0 0 -9.5-8.5c-5.794 0-9.176 4-9.5 8.5a21.858 21.858 0 0 1 4.5-.5 12.819 12.819 0 0 1 5 1zm3.5-5c1.209 0 2.5.866 2.5 2h-5c0-1.134 1.291-2 2.5-2zm-7 0c1.209 0 2.5.866 2.5 2h-5c0-1.134 1.291-2 2.5-2zm14.473 6a8.067 8.067 0 0 0 -8.08 8v2.141a3.891 3.891 0 0 0 -2.893 3.734v5.125a23.166 23.166 0 0 1 -4.174-1.623 7.857 7.857 0 0 1 -.027.878 3.263 3.263 0 0 1 -.729 2.074l-1.794 1.483a.379.379 0 0 1 -.276.188h-4c-1.324 0-2.346-1.336-2.653-3.343a7.058 7.058 0 0 1 .234-3.18 3.477 3.477 0 0 1 1.636-2.157 1.868 1.868 0 0 1 .783-.32h1.5a8.035 8.035 0 0 1 -1.5-5 11.1 11.1 0 0 1 .5-3 2.519 2.519 0 0 0 0-1.5 13.272 13.272 0 0 1 -.5-3.5c6.687-1.936 11 0 11 0s4.319-1.955 11 0"/>
<path d="m39 28h-10v-4a3.13 3.13 0 0 1 3-3 3.087 3.087 0 0 1 3 3v1a1.034 1.034 0 0 0 1 1h1a1.034 1.034 0 0 0 1-1v-1a6 6 0 0 0 -12 0v4h-1a2.073 2.073 0 0 0 -2 2v6a2.073 2.073 0 0 0 2 2h14a2.073 2.073 0 0 0 2-2v-6a2.073 2.073 0 0 0 -2-2zm-5.391 5.94a1.609 1.609 0 0 1 -3.217 0v-1.876a1.609 1.609 0 0 1 3.217 0z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -1,10 +1,8 @@
<svg height="16" viewBox="0 0 42 42" width="16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">
.ColorScheme-Text {
color:#222222;
}
</style>
</defs>
<path d="m32.66 29.319a1.432 1.432 0 0 0 -.66-.319h-1.5a8.125 8.125 0 0 0 1.5-5 11.027 11.027 0 0 0 -.5-3 2.519 2.519 0 0 1 0-1.5 12.987 12.987 0 0 0 .5-3.5c-6.681-1.955-11 0-11 0s-4.313-1.936-11 0a13.272 13.272 0 0 0 .5 3.5 2.519 2.519 0 0 1 0 1.5 11.1 11.1 0 0 0 -.5 3 8.035 8.035 0 0 0 1.5 5h-1.5a1.868 1.868 0 0 0 -.783.319 3.477 3.477 0 0 0 -1.636 2.157 7.058 7.058 0 0 0 -.234 3.18c.307 2.008 1.329 3.344 2.653 3.344h4a.379.379 0 0 0 .277-.187l1.793-1.483a3.263 3.263 0 0 0 .729-2.074 7.857 7.857 0 0 0 .027-.878 23.166 23.166 0 0 0 4.174 1.622 24.4 24.4 0 0 0 4.051-1.614 7.848 7.848 0 0 0 .027.869 3.263 3.263 0 0 0 .729 2.074l1.793 1.484a.61.61 0 0 0 .4.187h4c1.324 0 2.223-1.336 2.529-3.343a7.057 7.057 0 0 0 -.234-3.18 3.477 3.477 0 0 0 -1.635-2.158zm-17.069 6.5c-.019.009-.936.775-1.458 1.208a.418.418 0 0 1 -.627-.111 9.322 9.322 0 0 1 -.3-5.974 15.843 15.843 0 0 0 2.894 2.048c.051 1.03-.161 2.644-.509 2.834zm6.409-6.819h-2l.5-5a2 2 0 1 1 1 0zm6.38 7.921a.418.418 0 0 1 -.627.111c-.522-.433-1.439-1.2-1.458-1.208-.348-.189-.56-1.8-.505-2.828a15.84 15.84 0 0 0 2.9-2.037 9.322 9.322 0 0 1 -.31 5.962zm-20.924-11.162.744-1.366a1.579 1.579 0 0 0 -.019-1.557l.653-1.2c.2.014-.03-.113.165-.14.051-.217-.051-.336 0-.5a3.269 3.269 0 0 0 0-1.5 7.151 7.151 0 0 1 0-3 2.366 2.366 0 0 0 -2.378 1.448 2.409 2.409 0 0 0 .229 2.661l-.7 1.278a1.779 1.779 0 0 0 -1.317.891l-.741 1.372a1.577 1.577 0 0 0 -.019 1.487 3.028 3.028 0 0 0 -2.746 1.525 2.648 2.648 0 0 0 .044 2.631.748.748 0 0 0 .981.266.656.656 0 0 0 .284-.92 1.37 1.37 0 0 1 -.023-1.361 1.6 1.6 0 0 1 2.079-.63 1.408 1.408 0 0 1 .672 1.95 1.546 1.546 0 0 1 -1.2.78.688.688 0 0 0 -.636.749.707.707 0 0 0 .717.6.789.789 0 0 0 .082 0 2.989 2.989 0 0 0 2.322-1.513 2.669 2.669 0 0 0 -.377-3.084 1.767 1.767 0 0 0 1.184-.867zm33.217 1.2a3.021 3.021 0 0 0 -2.658-1.525 1.574 1.574 0 0 0 -.107-1.283l-.745-1.367a1.779 1.779 0 0 0 -1.317-.891l-.7-1.278a2.409 2.409 0 0 0 .229-2.661 2.283 2.283 0 0 0 -2.375-1.454 7.039 7.039 0 0 1 0 3 3.272 3.272 0 0 0 0 1.5c.047.152-.047.3 0 .5.227.04-.069.156.165.14l.653 1.2a1.579 1.579 0 0 0 -.019 1.557l.745 1.367a1.753 1.753 0 0 0 1.045.832 2.66 2.66 0 0 0 -.238 2.916 2.989 2.989 0 0 0 2.326 1.509.79.79 0 0 0 .082 0 .707.707 0 0 0 .717-.6.688.688 0 0 0 -.636-.749 1.546 1.546 0 0 1 -1.2-.78 1.408 1.408 0 0 1 .672-1.95 1.628 1.628 0 0 1 1.179-.089 1.512 1.512 0 0 1 .9.719 1.37 1.37 0 0 1 -.023 1.361.656.656 0 0 0 .284.92.748.748 0 0 0 .981-.266 2.648 2.648 0 0 0 .04-2.633zm-19.673-11.959a13.013 13.013 0 0 1 5-1 21.6 21.6 0 0 1 4.5.5 9.312 9.312 0 0 0 -9.5-8.5c-5.794 0-9.176 4-9.5 8.5a21.858 21.858 0 0 1 4.5-.5 12.819 12.819 0 0 1 5 1zm3.5-5c1.209 0 2.5.866 2.5 2h-5c0-1.134 1.291-2 2.5-2zm-7 0c1.209 0 2.5.866 2.5 2h-5c0-1.134 1.291-2 2.5-2z" fill-rule="evenodd" class="ColorScheme-Text" fill="currentColor"/>
<style id="current-color-scheme" type="text/css">
.ColorScheme-Text {
color:#232629;
}
</style>
<path d="m32.66 29.319a1.432 1.432 0 0 0 -.66-.319h-1.5a8.125 8.125 0 0 0 1.5-5 11.027 11.027 0 0 0 -.5-3 2.519 2.519 0 0 1 0-1.5 12.987 12.987 0 0 0 .5-3.5c-6.681-1.955-11 0-11 0s-4.313-1.936-11 0a13.272 13.272 0 0 0 .5 3.5 2.519 2.519 0 0 1 0 1.5 11.1 11.1 0 0 0 -.5 3 8.035 8.035 0 0 0 1.5 5h-1.5a1.868 1.868 0 0 0 -.783.319 3.477 3.477 0 0 0 -1.636 2.157 7.058 7.058 0 0 0 -.234 3.18c.307 2.008 1.329 3.344 2.653 3.344h4a.379.379 0 0 0 .277-.187l1.793-1.483a3.263 3.263 0 0 0 .729-2.074 7.857 7.857 0 0 0 .027-.878 23.166 23.166 0 0 0 4.174 1.622 24.4 24.4 0 0 0 4.051-1.614 7.848 7.848 0 0 0 .027.869 3.263 3.263 0 0 0 .729 2.074l1.793 1.484a.61.61 0 0 0 .4.187h4c1.324 0 2.223-1.336 2.529-3.343a7.057 7.057 0 0 0 -.234-3.18 3.477 3.477 0 0 0 -1.635-2.158zm-17.069 6.5c-.019.009-.936.775-1.458 1.208a.418.418 0 0 1 -.627-.111 9.322 9.322 0 0 1 -.3-5.974 15.843 15.843 0 0 0 2.894 2.048c.051 1.03-.161 2.644-.509 2.834zm6.409-6.819h-2l.5-5a2 2 0 1 1 1 0zm6.38 7.921a.418.418 0 0 1 -.627.111c-.522-.433-1.439-1.2-1.458-1.208-.348-.189-.56-1.8-.505-2.828a15.84 15.84 0 0 0 2.9-2.037 9.322 9.322 0 0 1 -.31 5.962zm-20.924-11.162.744-1.366a1.579 1.579 0 0 0 -.019-1.557l.653-1.2c.2.014-.03-.113.165-.14.051-.217-.051-.336 0-.5a3.269 3.269 0 0 0 0-1.5 7.151 7.151 0 0 1 0-3 2.366 2.366 0 0 0 -2.378 1.448 2.409 2.409 0 0 0 .229 2.661l-.7 1.278a1.779 1.779 0 0 0 -1.317.891l-.741 1.372a1.577 1.577 0 0 0 -.019 1.487 3.028 3.028 0 0 0 -2.746 1.525 2.648 2.648 0 0 0 .044 2.631.748.748 0 0 0 .981.266.656.656 0 0 0 .284-.92 1.37 1.37 0 0 1 -.023-1.361 1.6 1.6 0 0 1 2.079-.63 1.408 1.408 0 0 1 .672 1.95 1.546 1.546 0 0 1 -1.2.78.688.688 0 0 0 -.636.749.707.707 0 0 0 .717.6.789.789 0 0 0 .082 0 2.989 2.989 0 0 0 2.322-1.513 2.669 2.669 0 0 0 -.377-3.084 1.767 1.767 0 0 0 1.184-.867zm33.217 1.2a3.021 3.021 0 0 0 -2.658-1.525 1.574 1.574 0 0 0 -.107-1.283l-.745-1.367a1.779 1.779 0 0 0 -1.317-.891l-.7-1.278a2.409 2.409 0 0 0 .229-2.661 2.283 2.283 0 0 0 -2.375-1.454 7.039 7.039 0 0 1 0 3 3.272 3.272 0 0 0 0 1.5c.047.152-.047.3 0 .5.227.04-.069.156.165.14l.653 1.2a1.579 1.579 0 0 0 -.019 1.557l.745 1.367a1.753 1.753 0 0 0 1.045.832 2.66 2.66 0 0 0 -.238 2.916 2.989 2.989 0 0 0 2.326 1.509.79.79 0 0 0 .082 0 .707.707 0 0 0 .717-.6.688.688 0 0 0 -.636-.749 1.546 1.546 0 0 1 -1.2-.78 1.408 1.408 0 0 1 .672-1.95 1.628 1.628 0 0 1 1.179-.089 1.512 1.512 0 0 1 .9.719 1.37 1.37 0 0 1 -.023 1.361.656.656 0 0 0 .284.92.748.748 0 0 0 .981-.266 2.648 2.648 0 0 0 .04-2.633zm-19.673-11.959a13.013 13.013 0 0 1 5-1 21.6 21.6 0 0 1 4.5.5 9.312 9.312 0 0 0 -9.5-8.5c-5.794 0-9.176 4-9.5 8.5a21.858 21.858 0 0 1 4.5-.5 12.819 12.819 0 0 1 5 1zm3.5-5c1.209 0 2.5.866 2.5 2h-5c0-1.134 1.291-2 2.5-2zm-7 0c1.209 0 2.5.866 2.5 2h-5c0-1.134 1.291-2 2.5-2z" fill-rule="evenodd" style="fill:#f2f2f2;fill-opacity:1" class="ColorScheme-Text" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -2,7 +2,7 @@ Source: cryptomator
Maintainer: Cryptobot <releases@cryptomator.org>
Section: utils
Priority: optional
Build-Depends: debhelper (>=10), coffeelibs-jdk-23 (>= 23.0.2+7-0ppa1), libgtk-3-0, libxxf86vm1, libgl1
Build-Depends: debhelper (>=10), coffeelibs-jdk-23 (>= 23.0.1+11-0ppa1), libgtk-3-0, libxxf86vm1, libgl1
Standards-Version: 4.5.0
Homepage: https://cryptomator.org
Vcs-Git: https://github.com/cryptomator/cryptomator.git

View File

@@ -32,15 +32,15 @@ REVISION_NO=`git rev-list --count HEAD`
VERSION_NO=`mvn -f../../../pom.xml help:evaluate -Dexpression=project.version -q -DforceStdout | sed -rn 's/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/p'`
FUSE_LIB="FUSE-T"
JAVAFX_VERSION=23.0.2
JAVAFX_VERSION=23.0.1
JAVAFX_ARCH="undefined"
JAVAFX_JMODS_SHA256="undefined"
if [ "$(machine)" = "arm64e" ]; then
JAVAFX_ARCH="aarch64"
JAVAFX_JMODS_SHA256="c690cc642a3924cf56622951f478ba57aec9ce09063761f800c3319331bed3fc"
JAVAFX_JMODS_SHA256="a800724a1f3e6757ecfa0bd5bf7ed64d2e6a7a3f5b3522650a70b8cfc7782fb6"
else
JAVAFX_ARCH="x64"
JAVAFX_JMODS_SHA256="5e6c65c065eea22430c0eab36f37a5985eb8ad99e19e8772262021740d338f68"
JAVAFX_JMODS_SHA256="8857965975c464a0e5d57709292ce357d0ebb39f6168c41d5ca38301e42c3c8e"
fi
JAVAFX_JMODS_URL="https://download2.gluonhq.com/openjfx/${JAVAFX_VERSION}/openjfx-${JAVAFX_VERSION}_osx-${JAVAFX_ARCH}_bin-jmods.zip"

2
dist/win/build.ps1 vendored
View File

@@ -51,7 +51,7 @@ if ($clean -and (Test-Path -Path $runtimeImagePath)) {
}
## download jfx jmods
$javaFxVersion='23.0.2'
$javaFxVersion='23.0.1'
$javaFxJmodsUrl = "https://download2.gluonhq.com/openjfx/${javaFxVersion}/openjfx-${javaFxVersion}_windows-x64_bin-jmods.zip"
$javaFxJmodsSHA256 = 'ee176dcee3bd78bde7910735bd67f67c792882f5b89626796ae06f7a1c0119d3'
$javaFxJmods = '.\resources\jfxJmods.zip'

61
pom.xml
View File

@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.cryptomator</groupId>
<artifactId>cryptomator</artifactId>
<version>1.16.2</version>
<version>1.16.0-SNAPSHOT</version>
<name>Cryptomator Desktop App</name>
<organization>
@@ -33,65 +33,54 @@
<nonModularGroupIds>org.ow2.asm,org.apache.jackrabbit,org.apache.httpcomponents</nonModularGroupIds>
<!-- cryptomator dependencies -->
<cryptomator.cryptofs.version>2.9.0</cryptomator.cryptofs.version>
<cryptomator.integrations.version>1.5.1</cryptomator.integrations.version>
<cryptomator.cryptofs.version>2.9.0-beta2</cryptomator.cryptofs.version>
<cryptomator.integrations.version>1.5.0</cryptomator.integrations.version>
<cryptomator.integrations.win.version>1.3.0</cryptomator.integrations.win.version>
<cryptomator.integrations.mac.version>1.3.2</cryptomator.integrations.mac.version>
<cryptomator.integrations.linux.version>1.5.3</cryptomator.integrations.linux.version>
<cryptomator.fuse.version>5.0.5</cryptomator.fuse.version>
<cryptomator.webdav.version>2.0.10</cryptomator.webdav.version>
<cryptomator.integrations.mac.version>1.2.4</cryptomator.integrations.mac.version>
<cryptomator.integrations.linux.version>1.5.2</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.17.0</commons-lang3.version>
<dagger.version>2.56.1</dagger.version>
<dagger.version>2.55</dagger.version>
<easybind.version>2.2</easybind.version>
<jackson.version>2.18.3</jackson.version>
<javafx.version>23.0.2</javafx.version>
<jwt.version>4.5.0</jwt.version>
<jackson.version>2.18.2</jackson.version>
<javafx.version>23.0.1</javafx.version>
<jwt.version>4.4.0</jwt.version>
<nimbus-jose.version>9.37.3</nimbus-jose.version>
<logback.version>1.5.18</logback.version>
<slf4j.version>2.0.17</slf4j.version>
<tinyoauth2.version>0.8.1</tinyoauth2.version>
<logback.version>1.5.16</logback.version>
<slf4j.version>2.0.16</slf4j.version>
<tinyoauth2.version>0.8.0</tinyoauth2.version>
<zxcvbn.version>1.9.0</zxcvbn.version>
<!-- test dependencies -->
<junit.jupiter.version>5.12.2</junit.jupiter.version>
<mockito.version>5.17.0</mockito.version>
<junit.jupiter.version>5.11.4</junit.jupiter.version>
<mockito.version>5.15.2</mockito.version>
<hamcrest.version>3.0</hamcrest.version>
<!-- build-time dependencies -->
<jetbrains.annotations.version>26.0.2</jetbrains.annotations.version>
<dependency-check.version>12.1.1</dependency-check.version>
<jacoco.version>0.8.13</jacoco.version>
<jetbrains.annotations.version>26.0.1</jetbrains.annotations.version>
<dependency-check.version>12.1.0</dependency-check.version>
<jacoco.version>0.8.12</jacoco.version>
<license-generator.version>2.5.0</license-generator.version>
<junit-tree-reporter.version>1.4.0</junit-tree-reporter.version>
<mvn-compiler.version>3.14.0</mvn-compiler.version>
<mvn-compiler.version>3.13.0</mvn-compiler.version>
<mvn-resources.version>3.3.1</mvn-resources.version>
<mvn-dependency.version>3.8.1</mvn-dependency.version>
<mvn-surefire.version>3.5.3</mvn-surefire.version>
<mvn-surefire.version>3.5.2</mvn-surefire.version>
<mvn-jar.version>3.4.2</mvn-jar.version>
<!-- Property used by surefire to determine jacoco engine -->
<surefire.jacoco.args></surefire.jacoco.args>
</properties>
<!-- TODO: Remove once webdav version 2.0.11 is released -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.cryptomator</groupId>
<artifactId>webdav-nio-adapter-servlet</artifactId>
<version>1.2.9</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Cryptomator Libs -->
<dependency>
<groupId>org.cryptomator</groupId>
<artifactId>cryptolib</artifactId>
<version>2.2.1</version>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.cryptomator</groupId>
@@ -170,12 +159,6 @@
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>${jwt.version}</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.nimbusds</groupId>

View File

@@ -59,7 +59,6 @@ open module org.cryptomator.desktop {
uses org.cryptomator.common.locationpresets.LocationPresetsProvider;
uses SSLContextProvider;
uses org.cryptomator.event.NotificationHandler;
provides TrayMenuController with AwtTrayMenuController;
provides Configurator with LogbackConfiguratorFactory;

View File

@@ -1,22 +0,0 @@
package org.cryptomator;
import javafx.application.Platform;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class JavaFXUtil {
private JavaFXUtil() {}
public static boolean startPlatform() throws InterruptedException {
CountDownLatch latch = new CountDownLatch(1);
try {
Platform.startup(latch::countDown);
} catch (IllegalStateException e) {
//already initialized
latch.countDown();
}
return latch.await(5, TimeUnit.SECONDS);
}
}

View File

@@ -1,160 +0,0 @@
package org.cryptomator.common;
import org.cryptomator.cryptofs.event.BrokenDirFileEvent;
import org.cryptomator.cryptofs.event.BrokenFileNodeEvent;
import org.cryptomator.cryptofs.event.ConflictResolutionFailedEvent;
import org.cryptomator.cryptofs.event.ConflictResolvedEvent;
import org.cryptomator.cryptofs.event.DecryptionFailedEvent;
import org.cryptomator.cryptofs.event.FilesystemEvent;
import org.cryptomator.event.VaultEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.inject.Inject;
import javax.inject.Singleton;
import javafx.beans.InvalidationListener;
import javafx.collections.FXCollections;
import javafx.collections.MapChangeListener;
import javafx.collections.ObservableMap;
import java.nio.file.Path;
import java.util.Collection;
import java.util.Comparator;
import java.util.Map;
import java.util.Set;
/**
* Map containing {@link VaultEvent}s.
* The map is keyed by the ciphertext path of the affected resource _and_ the {@link FilesystemEvent}s class in order to group same events
* <p>
* Use {@link EventMap#put(VaultEvent)} to add an element and {@link EventMap#remove(VaultEvent)} to remove it.
* <p>
* The map is size restricted to {@value MAX_SIZE} elements. If a _new_ element (i.e. not already present) is added, the least recently added is removed.
*/
@Singleton
public class EventMap implements ObservableMap<EventMap.EventKey, VaultEvent> {
private static final int MAX_SIZE = 300;
public record EventKey(Path ciphertextPath, Class<? extends FilesystemEvent> c) {}
private final ObservableMap<EventMap.EventKey, VaultEvent> delegate;
@Inject
public EventMap() {
delegate = FXCollections.observableHashMap();
}
@Override
public void addListener(MapChangeListener<? super EventKey, ? super VaultEvent> mapChangeListener) {
delegate.addListener(mapChangeListener);
}
@Override
public void removeListener(MapChangeListener<? super EventKey, ? super VaultEvent> mapChangeListener) {
delegate.removeListener(mapChangeListener);
}
@Override
public int size() {
return delegate.size();
}
@Override
public boolean isEmpty() {
return delegate.isEmpty();
}
@Override
public boolean containsKey(Object key) {
return delegate.containsKey(key);
}
@Override
public boolean containsValue(Object value) {
return delegate.containsValue(value);
}
@Override
public VaultEvent get(Object key) {
return delegate.get(key);
}
@Override
public @Nullable VaultEvent put(EventKey key, VaultEvent value) {
return delegate.put(key, value);
}
@Override
public VaultEvent remove(Object key) {
return delegate.remove(key);
}
@Override
public void putAll(@NotNull Map<? extends EventKey, ? extends VaultEvent> m) {
delegate.putAll(m);
}
@Override
public void clear() {
delegate.clear();
}
@Override
public @NotNull Set<EventKey> keySet() {
return delegate.keySet();
}
@Override
public @NotNull Collection<VaultEvent> values() {
return delegate.values();
}
@Override
public @NotNull Set<Entry<EventKey, VaultEvent>> entrySet() {
return delegate.entrySet();
}
@Override
public void addListener(InvalidationListener invalidationListener) {
delegate.addListener(invalidationListener);
}
@Override
public void removeListener(InvalidationListener invalidationListener) {
delegate.removeListener(invalidationListener);
}
public synchronized void put(VaultEvent e) {
//compute key
var key = computeKey(e.actualEvent());
//if-else
var nullOrEntry = delegate.get(key);
if (nullOrEntry == null) {
if (size() == MAX_SIZE) {
delegate.entrySet().stream() //
.min(Comparator.comparing(entry -> entry.getValue().actualEvent().getTimestamp())) //
.ifPresent(oldestEntry -> delegate.remove(oldestEntry.getKey()));
}
delegate.put(key, e);
} else {
delegate.put(key, nullOrEntry.incrementCount(e.actualEvent()));
}
}
public synchronized VaultEvent remove(VaultEvent similar) {
//compute key
var key = computeKey(similar.actualEvent());
return this.remove(key);
}
private EventKey computeKey(FilesystemEvent e) {
var p = switch (e) {
case DecryptionFailedEvent(_, Path ciphertextPath, _) -> ciphertextPath;
case ConflictResolvedEvent(_, _, _, _, Path resolvedCiphertext) -> resolvedCiphertext;
case ConflictResolutionFailedEvent(_, _, Path conflictingCiphertext, _) -> conflictingCiphertext;
case BrokenDirFileEvent(_, Path ciphertext) -> ciphertext;
case BrokenFileNodeEvent(_, _, Path ciphertext) -> ciphertext;
};
return new EventKey(p, e.getClass());
}
}

View File

@@ -2,7 +2,6 @@ package org.cryptomator.common.keychain;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import org.cryptomator.common.Passphrase;
import org.cryptomator.integrations.keychain.KeychainAccessException;
import org.cryptomator.integrations.keychain.KeychainAccessProvider;
@@ -14,24 +13,20 @@ import javafx.beans.property.BooleanProperty;
import javafx.beans.property.ReadOnlyBooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@Singleton
public class KeychainManager implements KeychainAccessProvider {
private final ObjectExpression<KeychainAccessProvider> keychain;
private final LoadingCache<String, BooleanProperty> passphraseStoredProperties;
private final ReentrantReadWriteLock lock;
@Inject
KeychainManager(ObjectExpression<KeychainAccessProvider> selectedKeychain) {
this.keychain = selectedKeychain;
this.passphraseStoredProperties = Caffeine.newBuilder() //
.softValues() //
.weakValues() //
.build(this::createStoredPassphraseProperty);
keychain.addListener(ignored -> passphraseStoredProperties.invalidateAll());
this.lock = new ReentrantReadWriteLock(false);
}
private KeychainAccessProvider getKeychainOrFail() throws KeychainAccessException {
@@ -47,59 +42,29 @@ public class KeychainManager implements KeychainAccessProvider {
return getClass().getName();
}
@Override
public void storePassphrase(String key, String displayName, CharSequence passphrase) throws KeychainAccessException {
storePassphrase(key, displayName, passphrase, true);
}
//TODO: remove ignored parameter once the API is fixed
@Override
public void storePassphrase(String key, String displayName, CharSequence passphrase, boolean ignored) throws KeychainAccessException {
try {
lock.writeLock().lock();
var kc = getKeychainOrFail();
//this is the only keychain actually using the parameter
var usesOSAuth = (kc.getClass().getName().equals("org.cryptomator.macos.keychain.TouchIdKeychainAccess"));
kc.storePassphrase(key, displayName, passphrase, usesOSAuth);
} finally {
lock.writeLock().unlock();
}
getKeychainOrFail().storePassphrase(key, displayName, passphrase);
setPassphraseStored(key, true);
}
@Override
public char[] loadPassphrase(String key) throws KeychainAccessException {
char[] passphrase = null;
try {
lock.readLock().lock();
passphrase = getKeychainOrFail().loadPassphrase(key);
} finally {
lock.readLock().unlock();
}
char[] passphrase = getKeychainOrFail().loadPassphrase(key);
setPassphraseStored(key, passphrase != null);
return passphrase;
}
@Override
public void deletePassphrase(String key) throws KeychainAccessException {
try {
lock.writeLock().lock();
getKeychainOrFail().deletePassphrase(key);
} finally {
lock.writeLock().unlock();
}
getKeychainOrFail().deletePassphrase(key);
setPassphraseStored(key, false);
}
@Override
public void changePassphrase(String key, String displayName, CharSequence passphrase) throws KeychainAccessException {
if (isPassphraseStored(key)) {
try {
lock.writeLock().lock();
getKeychainOrFail().changePassphrase(key, displayName, passphrase);
} finally {
lock.writeLock().unlock();
}
getKeychainOrFail().changePassphrase(key, displayName, passphrase);
setPassphraseStored(key, true);
}
}
@@ -136,11 +101,13 @@ public class KeychainManager implements KeychainAccessProvider {
}
private void setPassphraseStored(String key, boolean value) {
BooleanProperty property = passphraseStoredProperties.get(key, _ -> new SimpleBooleanProperty(value));
if (Platform.isFxApplicationThread()) {
property.set(value);
} else {
Platform.runLater(() -> property.set(value));
BooleanProperty property = passphraseStoredProperties.getIfPresent(key);
if (property != null) {
if (Platform.isFxApplicationThread()) {
property.set(value);
} else {
Platform.runLater(() -> property.set(value));
}
}
}
@@ -167,22 +134,4 @@ public class KeychainManager implements KeychainAccessProvider {
}
}
public ObjectExpression<KeychainAccessProvider> getKeychainImplementation() {
return this.keychain;
}
public static void migrate(KeychainAccessProvider oldProvider, KeychainAccessProvider newProvider, Map<String, String> idsAndNames) throws KeychainAccessException {
if (oldProvider instanceof KeychainManager || newProvider instanceof KeychainManager) {
throw new IllegalArgumentException("KeychainManger must not be the source or target of migration");
}
for (var entry : idsAndNames.entrySet()) {
var passphrase = oldProvider.loadPassphrase(entry.getKey());
if (passphrase != null) {
var wrapper = new Passphrase(passphrase);
oldProvider.deletePassphrase(entry.getKey()); //we cannot apply "first-write-then-delete" pattern here, since we can potentially write to the same passphrase store (e.g., touchID and regular keychain)
newProvider.storePassphrase(entry.getKey(), entry.getValue(), wrapper);
wrapper.destroy();
}
}
}
}

View File

@@ -23,7 +23,6 @@ import org.cryptomator.cryptofs.event.FilesystemEvent;
import org.cryptomator.cryptolib.api.CryptoException;
import org.cryptomator.cryptolib.api.MasterkeyLoader;
import org.cryptomator.cryptolib.api.MasterkeyLoadingFailedException;
import org.cryptomator.event.VaultEvent;
import org.cryptomator.integrations.mount.MountFailedException;
import org.cryptomator.integrations.mount.Mountpoint;
import org.cryptomator.integrations.mount.UnmountFailedException;
@@ -35,7 +34,6 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Named;
import javafx.application.Platform;
import javafx.beans.Observable;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding;
@@ -425,17 +423,6 @@ public class Vault {
}
}
/**
* Gets the cleartext name from a given path to an encrypted vault file
*/
public String getCleartextName(Path ciphertextPath) throws IOException {
if (!state.getValue().equals(VaultState.Value.UNLOCKED)) {
throw new IllegalStateException("Vault is not unlocked");
}
var fs = cryptoFileSystem.get();
return fs.getCleartextName(ciphertextPath);
}
public VaultConfigCache getVaultConfigCache() {
return configCache;
}

View File

@@ -1,14 +0,0 @@
package org.cryptomator.event;
public sealed interface Answer permits Answer.DoNothing, Answer.DoSomething {
record DoNothing() implements Answer {}
record DoSomething(Runnable action) implements Answer {
void run() {
action.run();
}
}
}

View File

@@ -16,12 +16,6 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* Aggregator for {@link FilesystemEvent}s.
* <p>
* The aggregator groups filesystem events by the vault where the event occurred, an identifying path (clear- or ciphertext) and the event class (aka type).
* A group is called an {@link FSEventBucket}, its {@link FSEventBucketContent} is the most recent event object and a count of how often the event already occurred.
*/
@Singleton
public class FileSystemEventAggregator {
@@ -42,6 +36,7 @@ public class FileSystemEventAggregator {
*/
public void put(Vault v, FilesystemEvent e) {
var key = computeKey(v, e);
hasUpdates.set(true);
map.compute(key, (k, val) -> {
if (val == null) {
return new FSEventBucketContent(e, 1);
@@ -49,28 +44,27 @@ public class FileSystemEventAggregator {
return new FSEventBucketContent(e, val.count() + 1);
}
});
hasUpdates.set(true);
}
/**
* Removes an event bucket from the map.
*/
public FSEventBucketContent remove(FSEventBucket key) {
var content = map.remove(key);
hasUpdates.set(true);
return content;
return map.remove(key);
}
/**
* Clears the event map.
*/
public void clear() {
map.clear();
hasUpdates.set(true);
map.clear();
}
public boolean hasMaybeUpdates() {
public boolean hasUpdates() {
return hasUpdates.get();
}

View File

@@ -1,15 +0,0 @@
package org.cryptomator.event;
import org.cryptomator.integrations.common.IntegrationsLoader;
import java.util.ServiceLoader;
import java.util.stream.Stream;
public interface NotificationHandler {
Answer handle(VaultEvent e);
static Stream<NotificationHandler> loadAll() {
return IntegrationsLoader.loadAll(ServiceLoader.load(NotificationHandler.class), NotificationHandler.class);
}
}

View File

@@ -1,27 +0,0 @@
package org.cryptomator.event;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.cryptofs.event.FilesystemEvent;
import java.time.Instant;
public record VaultEvent(Vault v, FilesystemEvent actualEvent, int count) implements Comparable<VaultEvent> {
public VaultEvent(Vault v, FilesystemEvent actualEvent) {
this(v, actualEvent, 1);
}
@Override
public int compareTo(VaultEvent other) {
var timeResult = actualEvent.getTimestamp().compareTo(other.actualEvent().getTimestamp());
if(timeResult != 0) {
return timeResult;
} else {
return this.equals(other) ? 0 : this.actualEvent.getClass().getName().compareTo(other.actualEvent.getClass().getName());
}
}
public VaultEvent incrementCount(FilesystemEvent update) {
return new VaultEvent(v, update, count+1);
}
}

View File

@@ -1,185 +0,0 @@
package org.cryptomator.networking;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.KeyStoreSpi;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
import java.util.LinkedHashSet;
import java.util.concurrent.atomic.AtomicInteger;
public class CombinedKeyStoreSpi extends KeyStoreSpi {
private final KeyStore primary;
private final KeyStore fallback;
public static CombinedKeyStoreSpi create(KeyStore primary, KeyStore fallback) {
checkIfLoaded(primary);
checkIfLoaded(fallback);
return new CombinedKeyStoreSpi(primary, fallback);
}
private static void checkIfLoaded(KeyStore s) {
try {
s.aliases();
} catch (KeyStoreException e) {
throw new IllegalArgumentException("Keystore %s is not loaded.".formatted(s.getType()));
}
}
private CombinedKeyStoreSpi(KeyStore primary, KeyStore fallback) {
this.primary = primary;
this.fallback = fallback;
}
@Override
public Key engineGetKey(String alias, char[] password) throws NoSuchAlgorithmException, UnrecoverableKeyException {
try {
Key key = primary.getKey(alias, password);
if (key == null) {
key = fallback.getKey(alias, password);
}
return key;
} catch (KeyStoreException e) {
throw new IllegalStateException("At least one keystore of [%s, %s] is not initialized.".formatted(primary.getType(), fallback.getType()), e);
}
}
@Override
public Certificate[] engineGetCertificateChain(String alias) {
try {
Certificate[] chain = primary.getCertificateChain(alias);
if (chain == null) {
chain = fallback.getCertificateChain(alias);
}
return chain;
} catch (KeyStoreException e) {
throw new IllegalStateException("At least one keystore of [%s, %s] is not initialized.".formatted(primary.getType(), fallback.getType()), e);
}
}
@Override
public Certificate engineGetCertificate(String alias) {
try {
Certificate cert = primary.getCertificate(alias);
if (cert == null) {
cert = fallback.getCertificate(alias);
}
return cert;
} catch (KeyStoreException e) {
throw new IllegalStateException("At least one keystore of [%s, %s] is not initialized.".formatted(primary.getType(), fallback.getType()), e);
}
}
@Override
public Date engineGetCreationDate(String alias) {
try {
Date date = primary.getCreationDate(alias);
if (date == null) {
date = fallback.getCreationDate(alias);
}
return date;
} catch (KeyStoreException e) {
throw new IllegalStateException("At least one keystore of [%s, %s] is not initialized.".formatted(primary.getType(), fallback.getType()), e);
}
}
@Override
public void engineSetKeyEntry(String alias, Key key, char[] password, Certificate[] chain) throws KeyStoreException {
throw new UnsupportedOperationException("Read-only KeyStore");
}
@Override
public void engineSetKeyEntry(String alias, byte[] key, Certificate[] chain) throws KeyStoreException {
throw new UnsupportedOperationException("Read-only KeyStore");
}
@Override
public void engineSetCertificateEntry(String alias, Certificate cert) throws KeyStoreException {
throw new UnsupportedOperationException("Read-only KeyStore");
}
@Override
public void engineDeleteEntry(String alias) throws KeyStoreException {
throw new UnsupportedOperationException("Read-only KeyStore");
}
@Override
public Enumeration<String> engineAliases() {
var aliases = new LinkedHashSet<String>();
try {
primary.aliases().asIterator().forEachRemaining(aliases::add);
fallback.aliases().asIterator().forEachRemaining(aliases::add);
return Collections.enumeration(aliases);
} catch (KeyStoreException e) {
throw new IllegalStateException("At least one keystore of [%s, %s] is not initialized.".formatted(primary.getType(), fallback.getType()), e);
}
}
@Override
public boolean engineContainsAlias(String alias) {
try {
return primary.containsAlias(alias) || fallback.containsAlias(alias);
} catch (KeyStoreException e) {
throw new IllegalStateException("At least one keystore of [%s, %s] is not initialized.".formatted(primary.getType(), fallback.getType()), e);
}
}
@Override
public int engineSize() {
var aliases = engineAliases();
var i = new AtomicInteger(0);
aliases.asIterator().forEachRemaining(_ -> i.incrementAndGet());
return i.get();
}
@Override
public boolean engineIsKeyEntry(String alias) {
try {
return primary.isKeyEntry(alias) || fallback.isKeyEntry(alias);
} catch (KeyStoreException e) {
throw new IllegalStateException("At least one keystore of [%s, %s] is not initialized.".formatted(primary.getType(), fallback.getType()), e);
}
}
@Override
public boolean engineIsCertificateEntry(String alias) {
try {
return primary.isCertificateEntry(alias) || fallback.isCertificateEntry(alias);
} catch (KeyStoreException e) {
throw new IllegalStateException("At least one keystore of [%s, %s] is not initialized.".formatted(primary.getType(), fallback.getType()), e);
}
}
@Override
public String engineGetCertificateAlias(Certificate cert) {
try {
String alias = primary.getCertificateAlias(cert);
if (alias == null) {
alias = fallback.getCertificateAlias(cert);
}
return alias;
} catch (KeyStoreException e) {
throw new IllegalStateException("At least one keystore of [%s, %s] is not initialized.".formatted(primary.getType(), fallback.getType()), e);
}
}
@Override
public void engineStore(OutputStream stream, char[] password) throws IOException, NoSuchAlgorithmException, CertificateException {
throw new UnsupportedOperationException("Read-only KeyStore");
}
@Override
public void engineLoad(InputStream stream, char[] password) throws IOException, NoSuchAlgorithmException, CertificateException {
// Nothing to do; the real keystores are already loaded.
}
}

View File

@@ -6,7 +6,6 @@ import java.io.IOException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import java.security.cert.CertificateException;
/**
@@ -17,16 +16,6 @@ public class SSLContextWithMacKeychain extends SSLContextDifferentTrustStoreBase
@Override
KeyStore getTruststore() throws KeyStoreException, CertificateException, IOException, NoSuchAlgorithmException {
var userKeyStore = KeyStore.getInstance("KeychainStore");
var systemRootKeyStore = KeyStore.getInstance("KeychainStore-ROOT");
userKeyStore.load(null);
systemRootKeyStore.load(null);
try {
CombinedKeyStoreSpi spi = CombinedKeyStoreSpi.create(userKeyStore, systemRootKeyStore);
Provider dummyProvider = new Provider("CombinedKeyStoreProvider", "1.0", "Provides a combined, read-only KeyStore") {};
return new KeyStore(spi, dummyProvider, "CombinedKeyStoreProvider") {};
} catch (IllegalArgumentException e) {
throw new KeyStoreException(e);
}
return KeyStore.getInstance("KeychainStore-ROOT");
}
}

View File

@@ -12,7 +12,6 @@ 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"), //
DECRYPTNAMES("/fxml/decryptnames.fxml"), //
ERROR("/fxml/error.fxml"), //
EVENT_VIEW("/fxml/eventview.fxml"), //
FORGET_PASSWORD("/fxml/forget_password.fxml"), //

View File

@@ -1,25 +0,0 @@
package org.cryptomator.ui.decryptname;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.beans.value.ObservableValue;
import java.nio.file.Path;
public record CipherAndCleartext(Path ciphertext, String cleartextName) {
public String getCiphertextFilename() {
return ciphertext.getFileName().toString();
}
public ObservableValue<String> ciphertextFilenameProperty() {
return new ReadOnlyStringWrapper(getCiphertextFilename());
}
public String getCleartextName() {
return cleartextName;
}
public ObservableValue<String> cleartextNameProperty() {
return new ReadOnlyStringWrapper(getCleartextName());
}
}

View File

@@ -1,233 +0,0 @@
package org.cryptomator.ui.decryptname;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.cryptofs.common.Constants;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.controls.FontAwesome5Icon;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javafx.application.Platform;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.ListProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.Clipboard;
import javafx.scene.input.DataFormat;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.TransferMode;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import java.io.File;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@DecryptNameScoped
public class DecryptFileNamesViewController implements FxController {
private static final Logger LOG = LoggerFactory.getLogger(DecryptFileNamesViewController.class);
private static final KeyCodeCombination COPY_TO_CLIPBOARD_SHORTCUT = new KeyCodeCombination(KeyCode.C, KeyCodeCombination.SHORTCUT_DOWN);
private static final String COPY_TO_CLIPBOARD_SHORTCUT_STRING_WIN = "CTRL+C";
private static final String COPY_TO_CLIPBOARD_SHORTCUT_STRING_MAC = "⌘C";
private static final String COPY_TO_CLIPBOARD_SHORTCUT_STRING_LINUX = "CTRL+C";
private final ListProperty<CipherAndCleartext> mapping;
private final StringProperty dropZoneText = new SimpleStringProperty();
private final ObjectProperty<FontAwesome5Icon> dropZoneIcon = new SimpleObjectProperty<>();
private final BooleanProperty wrongFilesSelected = new SimpleBooleanProperty(false);
private final Stage window;
private final Vault vault;
private final ResourceBundle resourceBundle;
private final List<Path> initialList;
@FXML
public TableColumn<CipherAndCleartext, String> ciphertextColumn;
@FXML
public TableColumn<CipherAndCleartext, String> cleartextColumn;
@FXML
public TableView<CipherAndCleartext> cipherToCleartextTable;
@Inject
public DecryptFileNamesViewController(@DecryptNameWindow Stage window, @DecryptNameWindow Vault vault, @DecryptNameWindow List<Path> pathsToDecrypt, ResourceBundle resourceBundle) {
this.window = window;
this.vault = vault;
this.resourceBundle = resourceBundle;
this.mapping = new SimpleListProperty<>(FXCollections.observableArrayList());
this.initialList = pathsToDecrypt;
}
@FXML
public void initialize() {
cipherToCleartextTable.setItems(mapping);
cipherToCleartextTable.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY_ALL_COLUMNS);
//DragNDrop
cipherToCleartextTable.setOnDragEntered(event -> {
if (event.getGestureSource() == null && event.getDragboard().hasFiles()) {
cipherToCleartextTable.setItems(FXCollections.emptyObservableList());
}
});
cipherToCleartextTable.setOnDragOver(event -> {
if (event.getGestureSource() == null && event.getDragboard().hasFiles()) {
if (SystemUtils.IS_OS_WINDOWS || SystemUtils.IS_OS_MAC) {
event.acceptTransferModes(TransferMode.LINK);
} else {
event.acceptTransferModes(TransferMode.ANY);
}
}
});
cipherToCleartextTable.setOnDragDropped(event -> {
if (event.getGestureSource() == null && event.getDragboard().hasFiles()) {
checkAndDecrypt(event.getDragboard().getFiles().stream().map(File::toPath).toList());
cipherToCleartextTable.setItems(mapping);
}
});
cipherToCleartextTable.setOnDragExited(_ -> cipherToCleartextTable.setItems(mapping));
//selectionModel and copy-to-clipboard action
cipherToCleartextTable.getSelectionModel().setCellSelectionEnabled(true);
cipherToCleartextTable.setOnKeyPressed(keyEvent -> {
if (COPY_TO_CLIPBOARD_SHORTCUT.match(keyEvent)) {
copySingleCelltoClipboard();
}
});
ciphertextColumn.setCellValueFactory(new PropertyValueFactory<>("ciphertextFilename"));
cleartextColumn.setCellValueFactory(new PropertyValueFactory<>("cleartextName"));
dropZoneText.setValue(resourceBundle.getString("decryptNames.dropZone.message"));
dropZoneIcon.setValue(FontAwesome5Icon.FILE_IMPORT);
wrongFilesSelected.addListener((_, _, areWrongFiles) -> {
if (areWrongFiles) {
CompletableFuture.delayedExecutor(5, TimeUnit.SECONDS, Platform::runLater).execute(() -> {
dropZoneText.setValue(resourceBundle.getString("decryptNames.dropZone.message"));
dropZoneIcon.setValue(FontAwesome5Icon.FILE_IMPORT);
wrongFilesSelected.setValue(false);
});
}
});
if (!initialList.isEmpty()) {
checkAndDecrypt(initialList);
}
}
private void copySingleCelltoClipboard() {
cipherToCleartextTable.getSelectionModel().getSelectedCells().stream().findFirst().ifPresent(tablePosition -> {
var selectedItem = cipherToCleartextTable.getSelectionModel().getSelectedItem();
//TODO: give user feedback, if content is copied -> must be done via a custom cell factory to access the actual table cell!
if (tablePosition.getTableColumn().equals(ciphertextColumn)) {
Clipboard.getSystemClipboard().setContent(Map.of(DataFormat.PLAIN_TEXT, selectedItem.ciphertext().toString()));
} else {
Clipboard.getSystemClipboard().setContent(Map.of(DataFormat.PLAIN_TEXT, selectedItem.cleartextName()));
}
});
}
@FXML
public void selectFiles() {
var fileChooser = new FileChooser();
fileChooser.setTitle(resourceBundle.getString("decryptNames.filePicker.title"));
fileChooser.setSelectedExtensionFilter(new FileChooser.ExtensionFilter(resourceBundle.getString("decryptNames.filePicker.extensionDescription"), List.of("*.c9r")));
fileChooser.setInitialDirectory(vault.getPath().toFile());
var ciphertextNodes = fileChooser.showOpenMultipleDialog(window);
if (ciphertextNodes != null) {
checkAndDecrypt(ciphertextNodes.stream().map(File::toPath).toList());
}
}
private void checkAndDecrypt(List<Path> pathsToDecrypt) {
mapping.clear();
//Assumption: All files are in the same directory
var testPath = pathsToDecrypt.getFirst();
if (!testPath.startsWith(vault.getPath())) {
setDropZoneError(resourceBundle.getString("decryptNames.dropZone.error.foreignFiles").formatted(vault.getDisplayName()));
return;
}
if (pathsToDecrypt.size() == 1 && testPath.endsWith(Constants.DIR_ID_BACKUP_FILE_NAME)) {
setDropZoneError(resourceBundle.getString("decryptNames.dropZone.error.vaultInternalFiles"));
return;
}
try {
var newMapping = pathsToDecrypt.stream().filter(p -> !p.endsWith(Constants.DIR_ID_BACKUP_FILE_NAME)).map(this::getCleartextName).toList();
mapping.addAll(newMapping);
} catch (UncheckedIOException e) {
setDropZoneError(resourceBundle.getString("decryptNames.dropZone.error.generic"));
LOG.info("Failed to decrypt filenames for directory {}", testPath.getParent(), e);
} catch (IllegalArgumentException e) {
setDropZoneError(resourceBundle.getString("decryptNames.dropZone.error.vaultInternalFiles"));
} catch (UnsupportedOperationException e) {
setDropZoneError(resourceBundle.getString("decryptNames.dropZone.error.noDirIdBackup"));
}
}
private void setDropZoneError(String text) {
dropZoneIcon.setValue(FontAwesome5Icon.TIMES);
dropZoneText.setValue(text);
wrongFilesSelected.setValue(true);
}
private CipherAndCleartext getCleartextName(Path ciphertextNode) {
try {
var cleartextName = vault.getCleartextName(ciphertextNode);
return new CipherAndCleartext(ciphertextNode, cleartextName);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
//obvservable getter
public ObservableValue<String> dropZoneTextProperty() {
return dropZoneText;
}
public String getDropZoneText() {
return dropZoneText.get();
}
public ObservableValue<FontAwesome5Icon> dropZoneIconProperty() {
return dropZoneIcon;
}
public FontAwesome5Icon getDropZoneIcon() {
return dropZoneIcon.get();
}
public void clearTable() {
mapping.clear();
}
public void copyTableToClipboard() {
var csv = mapping.stream().map(cipherAndClear -> "\"" + cipherAndClear.ciphertext() + "\", \"" + cipherAndClear.cleartextName() + "\"").collect(Collectors.joining("\n"));
Clipboard.getSystemClipboard().setContent(Map.of(DataFormat.PLAIN_TEXT, csv));
}
public String getCopyToClipboardShortcutString() {
if (SystemUtils.IS_OS_WINDOWS) {
return COPY_TO_CLIPBOARD_SHORTCUT_STRING_WIN;
} else if (SystemUtils.IS_OS_MAC) {
return COPY_TO_CLIPBOARD_SHORTCUT_STRING_MAC;
} else {
return COPY_TO_CLIPBOARD_SHORTCUT_STRING_LINUX;
}
}
}

View File

@@ -1,50 +0,0 @@
package org.cryptomator.ui.decryptname;
import dagger.BindsInstance;
import dagger.Lazy;
import dagger.Subcomponent;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.common.vaults.VaultState;
import org.cryptomator.ui.common.FxmlFile;
import org.cryptomator.ui.common.FxmlScene;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Named;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.nio.file.Path;
import java.util.List;
@DecryptNameScoped
@Subcomponent(modules = DecryptNameModule.class)
public interface DecryptNameComponent {
Logger LOG = LoggerFactory.getLogger(DecryptNameComponent.class);
@DecryptNameWindow
Stage window();
@FxmlScene(FxmlFile.DECRYPTNAMES)
Lazy<Scene> decryptNamesView();
@DecryptNameWindow
Vault vault();
default void showDecryptFileNameWindow() {
Stage s = window();
s.setScene(decryptNamesView().get());
s.sizeToScene();
if (vault().isUnlocked()) {
s.show();
} else {
LOG.error("Aborted showing DecryptFileName window: vault state is not {}, but {}.", VaultState.Value.UNLOCKED, vault().getState());
}
}
@Subcomponent.Factory
interface Factory {
DecryptNameComponent create(@BindsInstance @DecryptNameWindow Vault vault, @BindsInstance @Named("windowOwner") Stage owner, @BindsInstance @DecryptNameWindow List<Path> pathsToDecrypt);
}
}

View File

@@ -1,59 +0,0 @@
package org.cryptomator.ui.decryptname;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoMap;
import org.cryptomator.common.vaults.Vault;
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.Named;
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
public abstract class DecryptNameModule {
@Provides
@DecryptNameScoped
@DecryptNameWindow
static Stage provideStage(StageFactory factory, @Named("windowOwner") Stage owner, @DecryptNameWindow Vault vault, ResourceBundle resourceBundle) {
Stage stage = factory.create();
stage.setResizable(true);
stage.initModality(Modality.WINDOW_MODAL);
stage.initOwner(owner);
stage.setTitle(resourceBundle.getString("decryptNames.title"));
vault.stateProperty().addListener(((_, _, _) -> stage.close())); //as soon as the state changes from unlocked, close the window
return stage;
}
@Provides
@DecryptNameScoped
@DecryptNameWindow
static FxmlLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
return new FxmlLoaderFactory(factories, sceneFactory, resourceBundle);
}
@Provides
@FxmlScene(FxmlFile.DECRYPTNAMES)
@DecryptNameScoped
static Scene provideDecryptNamesViewScene(@DecryptNameWindow FxmlLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene(FxmlFile.DECRYPTNAMES);
}
@Binds
@IntoMap
@FxControllerKey(DecryptFileNamesViewController.class)
abstract FxController bindDecryptNamesViewController(DecryptFileNamesViewController controller);
}

View File

@@ -1,11 +0,0 @@
package org.cryptomator.ui.decryptname;
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 DecryptNameScoped {}

View File

@@ -1,12 +0,0 @@
package org.cryptomator.ui.decryptname;
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 DecryptNameWindow {}

View File

@@ -206,7 +206,7 @@ public class EventListCellController implements FxController {
if (vaultUnlocked.getValue()) {
return eventMessage.getValue();
} else {
return "***********";
return resourceBundle.getString("eventView.entry.vaultLocked.message");
}
}

View File

@@ -1,14 +0,0 @@
package org.cryptomator.ui.eventview;
import org.cryptomator.ui.common.FxController;
import javax.inject.Inject;
@EventViewScoped
public class UpdateEventViewController implements FxController {
@Inject
public UpdateEventViewController() {
}
}

View File

@@ -29,7 +29,7 @@ public class FxApplication {
private final FxApplicationStyle applicationStyle;
private final FxApplicationTerminator applicationTerminator;
private final AutoUnlocker autoUnlocker;
private final FxFSEventList fxFSEventList;
private final FxFSEventList fxFSEventList; //not unused! By injecting it here, the object gets initiated the service starts
@Inject
FxApplication(@Named("startupTime") long startupTime, Environment environment, Settings settings, AppLaunchEventHandler launchEventHandler, Lazy<TrayMenuComponent> trayMenu, FxApplicationWindows appWindows, FxApplicationStyle applicationStyle, FxApplicationTerminator applicationTerminator, AutoUnlocker autoUnlocker, FxFSEventList fxFSEventList) {
@@ -87,7 +87,6 @@ public class FxApplication {
migrateAndInformDokanyRemoval();
launchEventHandler.startHandlingLaunchEvents();
fxFSEventList.schedulePollForUpdates();
autoUnlocker.tryUnlockForTimespan(2, TimeUnit.MINUTES);
}

View File

@@ -7,7 +7,6 @@ package org.cryptomator.ui.fxapp;
import dagger.Module;
import dagger.Provides;
import org.cryptomator.ui.decryptname.DecryptNameComponent;
import org.cryptomator.ui.error.ErrorComponent;
import org.cryptomator.ui.eventview.EventViewComponent;
import org.cryptomator.ui.health.HealthCheckComponent;
@@ -29,7 +28,6 @@ import java.io.IOException;
import java.io.InputStream;
@Module(includes = {UpdateCheckerModule.class}, subcomponents = {TrayMenuComponent.class, //
DecryptNameComponent.class, //
MainWindowComponent.class, //
PreferencesComponent.class, //
VaultOptionsComponent.class, //

View File

@@ -11,49 +11,45 @@ import javafx.beans.property.SimpleBooleanProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
/**
* List of all occurred filesystem events.
* <p>
* The list exposes an observable list and a property to listen for updates. Internally it polls the {@link FileSystemEventAggregator} in a regular interval for updates.
* If an update is available, the list from the {@link FileSystemEventAggregator } is cloned to this list on the FX application thread.
*/
@FxApplicationScoped
public class FxFSEventList {
private final ObservableList<Map.Entry<FSEventBucket, FSEventBucketContent>> events;
private final FileSystemEventAggregator eventAggregator;
private final ScheduledExecutorService scheduler;
private final ScheduledFuture<?> scheduledTask;
private final BooleanProperty unreadEvents;
@Inject
public FxFSEventList(FileSystemEventAggregator fsEventAggregator, ScheduledExecutorService scheduler) {
this.events = FXCollections.observableArrayList();
this.eventAggregator = fsEventAggregator;
this.scheduler = scheduler;
this.unreadEvents = new SimpleBooleanProperty(false);
}
public void schedulePollForUpdates() {
scheduler.schedule(this::checkForEventUpdates, 1000, TimeUnit.MILLISECONDS);
this.scheduledTask = scheduler.scheduleWithFixedDelay(() -> {
if (fsEventAggregator.hasUpdates()) {
flush();
}
}, 1000, 1000, TimeUnit.MILLISECONDS);
}
/**
* Checks for event updates and reschedules.
* If updates are available, the aggregated events are copied from back- to the frontend.
* Reschedules itself on successful execution
* Starts the clone task on the FX thread and wait till it is completed
*/
private void checkForEventUpdates() {
if (eventAggregator.hasMaybeUpdates()) {
Platform.runLater(() -> {
eventAggregator.cloneTo(events);
unreadEvents.setValue(true);
schedulePollForUpdates();
});
} else {
schedulePollForUpdates();
private void flush() {
var latch = new CountDownLatch(1);
Platform.runLater(() -> {
eventAggregator.cloneTo(events);
unreadEvents.setValue(true);
latch.countDown();
});
try {
latch.await();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
@@ -64,4 +60,6 @@ public class FxFSEventList {
public BooleanProperty unreadEventsProperty() {
return unreadEvents;
}
}

View File

@@ -112,12 +112,12 @@ public class MasterkeyFileLoadingStrategy implements KeyLoadingStrategy {
}
private void savePasswordToSystemkeychain(Passphrase passphrase) {
try {
if (keychain.isSupported() && !keychain.getPassphraseStoredProperty(vault.getId()).get()) {
if (keychain.isSupported()) {
try {
keychain.storePassphrase(vault.getId(), vault.getDisplayName(), passphrase);
} catch (KeychainAccessException e) {
LOG.error("Failed to store passphrase in system keychain.", e);
}
} catch (KeychainAccessException e) {
LOG.error("Failed to store passphrase in system keychain.", e);
}
}

View File

@@ -36,7 +36,6 @@ import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import javafx.util.Duration;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
@PassphraseEntryScoped
public class PassphraseEntryController implements FxController {
@@ -50,7 +49,6 @@ public class PassphraseEntryController implements FxController {
private final ForgetPasswordComponent.Builder forgetPassword;
private final KeychainManager keychain;
private final StringBinding vaultName;
private final ExecutorService backgroundExecutorService;
private final BooleanProperty unlockInProgress = new SimpleBooleanProperty();
private final ObjectBinding<ContentDisplay> unlockButtonContentDisplay = Bindings.when(unlockInProgress).then(ContentDisplay.LEFT).otherwise(ContentDisplay.TEXT_ONLY);
private final BooleanProperty unlockButtonDisabled = new SimpleBooleanProperty();
@@ -66,7 +64,7 @@ public class PassphraseEntryController implements FxController {
public Animation unlockAnimation;
@Inject
public PassphraseEntryController(@KeyLoading Stage window, @KeyLoading Vault vault, CompletableFuture<PassphraseEntryResult> result, @Nullable @Named("savedPassword") Passphrase savedPassword, ForgetPasswordComponent.Builder forgetPassword, KeychainManager keychain, ExecutorService backgroundExecutorService) {
public PassphraseEntryController(@KeyLoading Stage window, @KeyLoading Vault vault, CompletableFuture<PassphraseEntryResult> result, @Nullable @Named("savedPassword") Passphrase savedPassword, ForgetPasswordComponent.Builder forgetPassword, KeychainManager keychain) {
this.window = window;
this.vault = vault;
this.result = result;
@@ -74,8 +72,8 @@ public class PassphraseEntryController implements FxController {
this.forgetPassword = forgetPassword;
this.keychain = keychain;
this.vaultName = WeakBindings.bindString(vault.displayNameProperty());
this.backgroundExecutorService = backgroundExecutorService;
window.setOnHiding(this::windowClosed);
result.whenCompleteAsync((r, t) -> unlockInProgress.set(false), Platform::runLater);
}
@FXML
@@ -121,6 +119,8 @@ public class PassphraseEntryController implements FxController {
new KeyFrame(Duration.millis(800), legsExtendedY, legsExtendedX, faceHidden), //
new KeyFrame(Duration.millis(1000), faceVisible) //
);
result.whenCompleteAsync((r, t) -> stopUnlockAnimation());
}
@FXML
@@ -133,9 +133,6 @@ public class PassphraseEntryController implements FxController {
result.cancel(true);
LOG.debug("Unlock canceled by user.");
}
if( passwordField != null) {
passwordField.getCharacters().destroy();
}
}
@@ -145,7 +142,7 @@ public class PassphraseEntryController implements FxController {
unlockInProgress.set(true);
CharSequence pwFieldContents = passwordField.getCharacters();
Passphrase pw = Passphrase.copyOf(pwFieldContents);
result.completeAsync(() -> new PassphraseEntryResult(pw, savePasswordCheckbox.isSelected()), backgroundExecutorService);
result.complete(new PassphraseEntryResult(pw, savePasswordCheckbox.isSelected()));
startUnlockAnimation();
}

View File

@@ -95,6 +95,16 @@ public class MainWindowController implements FxController {
int width = settings.windowWidth.get();
int height = settings.windowHeight.get();
// Minimizing a window in Windows and closing it could result in an out of bounds position at (x, y) = (-32000, -32000)
// See https://devblogs.microsoft.com/oldnewthing/20041028-00/?p=37453
// If the position is (-32000, -32000), restore to the last saved position
if (window.getX() == -32000 && window.getY() == -32000) {
window.setX(x);
window.setY(y);
window.setWidth(width);
window.setHeight(height);
}
Rectangle2D primaryScreenBounds = Screen.getPrimary().getBounds();
if (!isWithinDisplayBounds(x, y, width, height)) { //use stored window position
LOG.debug("Resetting window position due to insufficient screen overlap");
@@ -166,7 +176,7 @@ public class MainWindowController implements FxController {
return updateAvailable.get();
}
public BooleanBinding licenseValidProperty() {
public BooleanBinding licenseValidProperty(){
return licenseHolder.validLicenseProperty();
}

View File

@@ -8,9 +8,9 @@ import org.cryptomator.ui.vaultoptions.SelectedVaultOptionsTab;
import org.cryptomator.ui.vaultoptions.VaultOptionsComponent;
import javax.inject.Inject;
import javafx.beans.binding.Bindings;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.stage.Stage;
@@ -21,6 +21,7 @@ public class VaultDetailLockedController implements FxController {
private final ReadOnlyObjectProperty<Vault> vault;
private final FxApplicationWindows appWindows;
private final VaultOptionsComponent.Factory vaultOptionsWindow;
private final KeychainManager keychain;
private final Stage mainWindow;
private final ObservableValue<Boolean> passwordSaved;
@@ -29,11 +30,13 @@ public class VaultDetailLockedController implements FxController {
this.vault = vault;
this.appWindows = appWindows;
this.vaultOptionsWindow = vaultOptionsWindow;
this.keychain = keychain;
this.mainWindow = mainWindow;
this.passwordSaved = Bindings.createBooleanBinding(() -> {
var v = vault.get();
return v != null && keychain.getPassphraseStoredProperty(v.getId()).getValue();
}, vault, keychain.getKeychainImplementation());
if (keychain.isSupported() && !keychain.isLocked()) {
this.passwordSaved = vault.flatMap(v -> keychain.getPassphraseStoredProperty(v.getId())).orElse(false);
} else {
this.passwordSaved = new SimpleBooleanProperty(false);
}
}
@FXML

View File

@@ -6,14 +6,12 @@ import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.tobiasdiez.easybind.EasyBind;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.Nullable;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.integrations.mount.Mountpoint;
import org.cryptomator.integrations.revealpath.RevealFailedException;
import org.cryptomator.integrations.revealpath.RevealPathService;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.VaultService;
import org.cryptomator.ui.decryptname.DecryptNameComponent;
import org.cryptomator.ui.fxapp.FxApplicationWindows;
import org.cryptomator.ui.stats.VaultStatisticsComponent;
import org.cryptomator.ui.wrongfilealert.WrongFileAlertComponent;
@@ -41,13 +39,10 @@ import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.ResourceBundle;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Function;
@MainWindowScoped
public class VaultDetailUnlockedController implements FxController {
@@ -61,39 +56,26 @@ public class VaultDetailUnlockedController implements FxController {
private final WrongFileAlertComponent.Builder wrongFileAlert;
private final Stage mainWindow;
private final Optional<RevealPathService> revealPathService;
private final DecryptNameComponent.Factory decryptNameWindowFactory;
private final ResourceBundle resourceBundle;
private final LoadingCache<Vault, VaultStatisticsComponent> vaultStats;
private final VaultStatisticsComponent.Builder vaultStatsBuilder;
private final ObservableValue<Boolean> accessibleViaPath;
private final ObservableValue<Boolean> accessibleViaUri;
private final ObservableValue<String> mountPoint;
private final BooleanProperty draggingOverLocateEncrypted = new SimpleBooleanProperty();
private final BooleanProperty draggingOverDecryptName = new SimpleBooleanProperty();
private final BooleanProperty draggingOver = new SimpleBooleanProperty();
private final BooleanProperty ciphertextPathsCopied = new SimpleBooleanProperty();
@FXML
public Button revealEncryptedDropZone;
@FXML
public Button decryptNameDropZone;
//FXML
public Button dropZone;
@Inject
public VaultDetailUnlockedController(ObjectProperty<Vault> vault, //
FxApplicationWindows appWindows, //
VaultService vaultService, //
VaultStatisticsComponent.Builder vaultStatsBuilder, //
WrongFileAlertComponent.Builder wrongFileAlert, //
@MainWindow Stage mainWindow, //
Optional<RevealPathService> revealPathService, //
DecryptNameComponent.Factory decryptNameWindowFactory, //
ResourceBundle resourceBundle) {
public VaultDetailUnlockedController(ObjectProperty<Vault> vault, FxApplicationWindows appWindows, VaultService vaultService, VaultStatisticsComponent.Builder vaultStatsBuilder, WrongFileAlertComponent.Builder wrongFileAlert, @MainWindow Stage mainWindow, Optional<RevealPathService> revealPathService, ResourceBundle resourceBundle) {
this.vault = vault;
this.appWindows = appWindows;
this.vaultService = vaultService;
this.wrongFileAlert = wrongFileAlert;
this.mainWindow = mainWindow;
this.revealPathService = revealPathService;
this.decryptNameWindowFactory = decryptNameWindowFactory;
this.resourceBundle = resourceBundle;
this.vaultStats = CacheBuilder.newBuilder().weakValues().build(CacheLoader.from(this::buildVaultStats));
this.vaultStatsBuilder = vaultStatsBuilder;
@@ -110,81 +92,89 @@ public class VaultDetailUnlockedController implements FxController {
}
public void initialize() {
revealEncryptedDropZone.setOnDragOver(e -> handleDragOver(e, draggingOverLocateEncrypted));
revealEncryptedDropZone.setOnDragDropped(e -> handleDragDropped(e, this::getCiphertextPath, this::revealOrCopyPaths));
revealEncryptedDropZone.setOnDragExited(_ -> draggingOverLocateEncrypted.setValue(false));
dropZone.setOnDragEntered(this::handleDragEvent);
dropZone.setOnDragOver(this::handleDragEvent);
dropZone.setOnDragDropped(this::handleDragEvent);
dropZone.setOnDragExited(this::handleDragEvent);
decryptNameDropZone.setOnDragOver(e -> handleDragOver(e, draggingOverDecryptName));
decryptNameDropZone.setOnDragDropped(e -> showDecryptNameWindow(e.getDragboard().getFiles().stream().map(File::toPath).toList()));
decryptNameDropZone.setOnDragExited(_ -> draggingOverDecryptName.setValue(false));
EasyBind.includeWhen(revealEncryptedDropZone.getStyleClass(), ACTIVE_CLASS, draggingOverLocateEncrypted);
EasyBind.includeWhen(decryptNameDropZone.getStyleClass(), ACTIVE_CLASS, draggingOverDecryptName);
EasyBind.includeWhen(dropZone.getStyleClass(), ACTIVE_CLASS, draggingOver);
}
private void handleDragOver(DragEvent event, BooleanProperty prop) {
if (event.getGestureSource() == null && event.getDragboard().hasFiles()) {
if (SystemUtils.IS_OS_WINDOWS || SystemUtils.IS_OS_MAC) {
private void handleDragEvent(DragEvent event) {
if (DragEvent.DRAG_OVER.equals(event.getEventType()) && event.getGestureSource() == null && event.getDragboard().hasFiles()) {
if(SystemUtils.IS_OS_WINDOWS || SystemUtils.IS_OS_MAC) {
event.acceptTransferModes(TransferMode.LINK);
} else {
event.acceptTransferModes(TransferMode.ANY);
}
prop.set(true);
draggingOver.set(true);
} else if (DragEvent.DRAG_DROPPED.equals(event.getEventType()) && event.getGestureSource() == null && event.getDragboard().hasFiles()) {
List<Path> ciphertextPaths = event.getDragboard().getFiles().stream().map(File::toPath).map(this::getCiphertextPath).flatMap(Optional::stream).toList();
if (ciphertextPaths.isEmpty()) {
wrongFileAlert.build().showWrongFileAlertWindow();
} else {
revealOrCopyPaths(ciphertextPaths);
}
event.setDropCompleted(!ciphertextPaths.isEmpty());
event.consume();
} else if (DragEvent.DRAG_EXITED.equals(event.getEventType())) {
draggingOver.set(false);
}
}
private <T> void handleDragDropped(DragEvent event, Function<Path, T> computation, Consumer<List<T>> positiveAction) {
if (event.getGestureSource() == null && event.getDragboard().hasFiles()) {
List<T> objects = event.getDragboard().getFiles().stream().map(File::toPath).map(computation).filter(Objects::nonNull).toList();
if (objects.isEmpty()) {
wrongFileAlert.build().showWrongFileAlertWindow();
} else {
positiveAction.accept(objects);
}
event.setDropCompleted(!objects.isEmpty());
event.consume();
}
private VaultStatisticsComponent buildVaultStats(Vault vault) {
return vaultStatsBuilder.vault(vault).build();
}
@FXML
public void chooseDecryptedFileAndReveal() {
public void revealAccessLocation() {
vaultService.reveal(vault.get());
}
@FXML
public void copyMountUri() {
ClipboardContent clipboardContent = new ClipboardContent();
clipboardContent.putString(mountPoint.getValue());
Clipboard.getSystemClipboard().setContent(clipboardContent);
}
@FXML
public void lock() {
appWindows.startLockWorkflow(vault.get(), mainWindow);
}
@FXML
public void showVaultStatistics() {
vaultStats.getUnchecked(vault.get()).showVaultStatisticsWindow();
}
@FXML
public void chooseFileAndReveal() {
Preconditions.checkState(accessibleViaPath.getValue());
var fileChooser = new FileChooser();
fileChooser.setTitle(resourceBundle.getString("main.vaultDetail.locateEncrypted.filePickerTitle"));
fileChooser.setTitle(resourceBundle.getString("main.vaultDetail.filePickerTitle"));
fileChooser.setInitialDirectory(Path.of(mountPoint.getValue()).toFile());
var cleartextFile = fileChooser.showOpenDialog(mainWindow);
if (cleartextFile != null) {
var ciphertextPath = getCiphertextPath(cleartextFile.toPath());
if (ciphertextPath != null) {
revealOrCopyPaths(List.of(ciphertextPath));
}
var ciphertextPaths = getCiphertextPath(cleartextFile.toPath()).stream().toList();
revealOrCopyPaths(ciphertextPaths);
}
}
@FXML
public void showDecryptNameWindow() {
showDecryptNameWindow(List.of());
}
private void showDecryptNameWindow(List<Path> pathsToDecrypt) {
decryptNameWindowFactory.create(vault.get(), mainWindow, pathsToDecrypt).showDecryptFileNameWindow();
}
private boolean startsWithVaultAccessPoint(Path path) {
return path.startsWith(Path.of(mountPoint.getValue()));
}
@Nullable
private Path getCiphertextPath(Path path) {
private Optional<Path> getCiphertextPath(Path path) {
if (!startsWithVaultAccessPoint(path)) {
LOG.debug("Path does not start with mount point of selected vault: {}", path);
return null;
LOG.debug("Path does not start with access point of selected vault: {}", path);
return Optional.empty();
}
try {
return vault.get().getCiphertextPath(path);
return Optional.of(vault.get().getCiphertextPath(path));
} catch (IOException e) {
LOG.warn("Unable to get ciphertext path from path: {}", path, e);
return null;
return Optional.empty();
}
}
@@ -216,32 +206,6 @@ public class VaultDetailUnlockedController implements FxController {
});
}
private VaultStatisticsComponent buildVaultStats(Vault vault) {
return vaultStatsBuilder.vault(vault).build();
}
@FXML
public void revealAccessLocation() {
vaultService.reveal(vault.get());
}
@FXML
public void copyMountUri() {
ClipboardContent clipboardContent = new ClipboardContent();
clipboardContent.putString(mountPoint.getValue());
Clipboard.getSystemClipboard().setContent(clipboardContent);
}
@FXML
public void lock() {
appWindows.startLockWorkflow(vault.get(), mainWindow);
}
@FXML
public void showVaultStatistics() {
vaultStats.getUnchecked(vault.get()).showVaultStatisticsWindow();
}
/* Getter/Setter */
public ReadOnlyObjectProperty<Vault> vaultProperty() {
@@ -283,6 +247,4 @@ public class VaultDetailUnlockedController implements FxController {
public boolean isCiphertextPathsCopied() {
return ciphertextPathsCopied.get();
}
}

View File

@@ -270,6 +270,7 @@ public class VaultListController implements FxController {
@FXML
public void showEventViewer() {
appWindows.showEventViewer();
unreadEvents.setValue(false);
}
// Getter and Setter

View File

@@ -1,13 +1,10 @@
package org.cryptomator.ui.preferences;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.Environment;
import org.cryptomator.common.keychain.KeychainManager;
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.KeychainAccessException;
import org.cryptomator.integrations.keychain.KeychainAccessProvider;
import org.cryptomator.integrations.quickaccess.QuickAccessService;
import org.cryptomator.ui.common.FxController;
@@ -17,7 +14,6 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javafx.application.Application;
import javafx.beans.Observable;
import javafx.beans.binding.Bindings;
import javafx.fxml.FXML;
import javafx.scene.control.CheckBox;
@@ -27,10 +23,6 @@ import javafx.stage.Stage;
import javafx.util.StringConverter;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
@PreferencesScoped
public class GeneralPreferencesController implements FxController {
@@ -44,8 +36,6 @@ public class GeneralPreferencesController implements FxController {
private final Application application;
private final Environment environment;
private final List<KeychainAccessProvider> keychainAccessProviders;
private final KeychainManager keychain;
private final ExecutorService backgroundExecutor;
private final FxApplicationWindows appWindows;
public CheckBox useKeychainCheckbox;
public ChoiceBox<KeychainAccessProvider> keychainBackendChoiceBox;
@@ -57,18 +47,12 @@ public class GeneralPreferencesController implements FxController {
public CheckBox autoStartCheckbox;
public ToggleGroup nodeOrientation;
private CompletionStage<Void> keychainMigrations = CompletableFuture.completedFuture(null);
@Inject
GeneralPreferencesController(@PreferencesWindow Stage window, Settings settings, Optional<AutoStartProvider> autoStartProvider, //
List<KeychainAccessProvider> keychainAccessProviders, KeychainManager keychain, Application application, //
Environment environment, FxApplicationWindows appWindows, ExecutorService backgroundExecutor) {
GeneralPreferencesController(@PreferencesWindow Stage window, Settings settings, Optional<AutoStartProvider> autoStartProvider, List<KeychainAccessProvider> keychainAccessProviders, Application application, Environment environment, FxApplicationWindows appWindows) {
this.window = window;
this.settings = settings;
this.autoStartProvider = autoStartProvider;
this.keychainAccessProviders = keychainAccessProviders;
this.keychain = keychain;
this.backgroundExecutor = backgroundExecutor;
this.quickAccessServices = QuickAccessService.get().toList();
this.application = application;
this.environment = environment;
@@ -89,7 +73,6 @@ public class GeneralPreferencesController implements FxController {
Bindings.bindBidirectional(settings.keychainProvider, keychainBackendChoiceBox.valueProperty(), keychainSettingsConverter);
useKeychainCheckbox.selectedProperty().bindBidirectional(settings.useKeychain);
keychainBackendChoiceBox.disableProperty().bind(useKeychainCheckbox.selectedProperty().not());
keychainBackendChoiceBox.valueProperty().addListener(this::migrateKeychainEntries);
useQuickAccessCheckbox.selectedProperty().bindBidirectional(settings.useQuickAccess);
var quickAccessSettingsConverter = new ServiceToSettingsConverter<>(quickAccessServices);
@@ -100,25 +83,6 @@ public class GeneralPreferencesController implements FxController {
quickAccessServiceChoiceBox.disableProperty().bind(useQuickAccessCheckbox.selectedProperty().not());
}
private void migrateKeychainEntries(Observable observable, KeychainAccessProvider oldProvider, KeychainAccessProvider newProvider) {
//currently, we only migrate on macOS (touchID vs regular keychain)
if (SystemUtils.IS_OS_MAC) {
var idsAndNames = settings.directories.stream().collect(Collectors.toMap(vs -> vs.id, vs -> vs.displayName.getValue()));
if (!idsAndNames.isEmpty()) {
if (LOG.isDebugEnabled()) {
LOG.debug("Migrating keychain entries {} from {} to {}", idsAndNames.keySet(), oldProvider.displayName(), newProvider.displayName());
}
keychainMigrations = keychainMigrations.thenRunAsync(() -> {
try {
KeychainManager.migrate(oldProvider, newProvider, idsAndNames);
} catch (KeychainAccessException e) {
LOG.warn("Failed to migrate all entries from {} to {}", oldProvider.displayName(), newProvider.displayName(), e);
}
}, backgroundExecutor);
}
}
}
public boolean isAutoStartSupported() {
return autoStartProvider.isPresent();
}

View File

@@ -16,10 +16,6 @@
src: url('opensans_bold.ttf');
}
@font-face {
src: url('firacode_regular.ttf');
}
/*******************************************************************************
* *
* Root Styling & Colors *
@@ -129,12 +125,6 @@
-fx-fill: TEXT_FILL;
}
.cryptic-text {
-fx-fill: TEXT_FILL;
-fx-font-family: 'Fira Code';
-fx-font-size: 1.1em;
}
/*******************************************************************************
* *
* Glyph Icons *
@@ -312,10 +302,6 @@
-fx-font-size: 1.0em;
}
.list-cell .header-misc {
-fx-font-size: 1.0em;
}
.list-cell .detail-label {
-fx-text-fill: TEXT_FILL_MUTED;
-fx-font-size: 0.8em;
@@ -655,7 +641,7 @@
* *
******************************************************************************/
.icon-update-indicator {
.update-indicator {
-fx-fill: RED_5;
}
@@ -1022,167 +1008,4 @@
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BG_NORMAL;
-fx-background-insets: 0, 1px;
-fx-background-radius: 4px;
}
/*******************************************************************************
* *
* Decrypt Name Window
* *
******************************************************************************/
.decrypt-name-window .button-bar {
-fx-min-height:42px;
-fx-max-height:42px;
-fx-background-color: MAIN_BG;
-fx-border-color: transparent transparent CONTROL_BORDER_NORMAL transparent;
-fx-border-width: 0 0 1px 0;
}
.decrypt-name-window .button-bar .button-right {
-fx-border-color: transparent transparent transparent CONTROL_BORDER_NORMAL;
-fx-border-width: 0 0 0 1px;
-fx-background-color: MAIN_BG;
-fx-background-radius: 0px;
-fx-min-height: 42px;
-fx-max-height: 42px;
}
.decrypt-name-window .button-bar .button-right:armed {
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BG_ARMED;
}
.decrypt-name-window .table-view {
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BG_NORMAL;
-fx-background-insets: 0,1;
/* There is some oddness if padding is in em values rather than pixels,
in particular, the left border of the control doesn't show. */
-fx-padding: 1; /* 0.083333em; */
}
.table-view > .placeholder {
-fx-background-color: transparent;
-fx-background-radius: 0px;
}
.table-view > .placeholder > .button {
-fx-border-width: 0;
-fx-border-color: transparent;
-fx-background-radius: 0px;
}
.table-view:focused {
-fx-background-color: CONTROL_BORDER_FOCUSED, CONTROL_BG_NORMAL;
-fx-background-insets: 0, 1;
-fx-background-radius: 0, 0;
/* There is some oddness if padding is in em values rather than pixels,
in particular, the left border of the control doesn't show. */
-fx-padding: 1; /* 0.083333em; */
}
.table-view > .virtual-flow > .scroll-bar:vertical {
-fx-background-insets: 0, 0 0 0 1;
-fx-padding: -1 -1 -1 0;
}
.table-view > .virtual-flow > .corner {
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BG_NORMAL ;
-fx-background-insets: 0, 1 0 0 1;
}
/* Each row in the table is a table-row-cell. Inside a table-row-cell is any
number of table-cell. */
.table-row-cell {
-fx-background-color: GRAY_3, CONTROL_BG_NORMAL;
-fx-background-insets: 0, 0 0 1 0;
-fx-padding: 0.0em; /* 0 */
-fx-text-fill: TEXT_FILL;
}
.table-row-cell:odd {
-fx-background-color: GRAY_3, GRAY_1;
-fx-background-insets: 0, 0 0 1 0;
}
.table-cell {
-fx-padding: 3px 6px 3px 6px;
-fx-background-color: transparent;
-fx-border-color: transparent CONTROL_BORDER_NORMAL transparent transparent;
-fx-border-width: 1px;
-fx-cell-size: 30px;
-fx-text-fill: TEXT_FILL;
-fx-text-overrun: center-ellipsis;
}
.table-view:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled:selected > .table-cell {
-fx-text-fill: TEXT_FILL;
}
/* selected, hover - not specified */
/* selected, focused, hover */
/* selected, focused */
/* selected */
.table-view:focused:cell-selection > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled > .table-cell:selected,
.table-view:focused:cell-selection > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled > .table-cell:focused:selected,
.table-view:focused:cell-selection > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled > .table-cell:focused:selected:hover {
-fx-background-color: CONTROL_PRIMARY_BG_NORMAL, PRIMARY_D1;
-fx-background-insets: 0 0 0 0, 1 1 1 3;
-fx-text-fill: TEXT_FILL;
}
/* focused */
.table-view:focused:cell-selection > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled > .table-cell:focused {
-fx-background-color: CONTROL_PRIMARY_BORDER_FOCUSED, CONTROL_PRIMARY_BG_NORMAL , CONTROL_BG_NORMAL;
-fx-background-insets: 0 1 0 0, 1 2 1 1, 2 3 2 2;
-fx-text-fill: TEXT_FILL;
}
/* focused, hover */
.table-view:focused:cell-selection > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled > .table-cell:focused:hover {
-fx-background-color: CONTROL_PRIMARY_BORDER_FOCUSED, CONTROL_PRIMARY_BG_NORMAL , PRIMARY_D2;
-fx-background-insets: 0 1 0 0, 1 2 1 1, 2 3 2 2;
-fx-text-fill: TEXT_FILL;
}
/* hover */
.table-view:cell-selection > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled > .table-cell:hover {
-fx-background-color: PRIMARY_D2;
-fx-text-fill: TEXT_FILL;
-fx-background-insets: 0 0 1 0;
}
/* The column-resize-line is shown when the user is attempting to resize a column. */
.table-view .column-resize-line {
-fx-background-color: CONTROL_BG_ARMED;
-fx-padding: 0.0em 0.0416667em 0.0em 0.0416667em; /* 0 0.571429 0 0.571429 */
}
/* This is the area behind the column headers. An ideal place to specify background
and border colors for the whole area (not individual column-header's). */
.table-view .column-header-background {
-fx-background-color: GRAY_2;
-fx-padding: 0;
}
/* The column header row is made up of a number of column-header, one for each
TableColumn, and a 'filler' area that extends from the right-most column
to the edge of the tableview, or up to the 'column control' button. */
.table-view .column-header {
-fx-text-fill: TEXT_FILL;
-fx-font-size: 1.083333em; /* 13pt ; 1 more than the default font */
-fx-size: 24;
-fx-border-style: solid;
-fx-border-color:
transparent
GRAY_3
GRAY_3
transparent;
-fx-border-insets: 0 0 0 0;
-fx-border-width: 0.083333em;
}
.table-view .column-header .label {
-fx-alignment: center;
}
.table-view .empty-table {
-fx-background-color: MAIN_BG;
-fx-font-size: 1.166667em; /* 14pt - 2 more than the default font */
}
}

View File

@@ -16,10 +16,6 @@
src: url('opensans_bold.ttf');
}
@font-face {
src: url('firacode_regular.ttf');
}
/*******************************************************************************
* *
* Root Styling & Colors *
@@ -83,7 +79,6 @@
PROGRESS_INDICATOR_END: GRAY_4;
PROGRESS_BAR_BG: GRAY_8;
-fx-background-color: MAIN_BG;
-fx-text-fill: TEXT_FILL;
-fx-font-family: 'Open Sans';
@@ -129,12 +124,6 @@
-fx-fill: TEXT_FILL;
}
.cryptic-text {
-fx-fill: TEXT_FILL;
-fx-font-family: 'Fira Code';
-fx-font-size: 1.1em;
}
/*******************************************************************************
* *
* Glyph Icons *
@@ -1022,167 +1011,4 @@
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BG_NORMAL;
-fx-background-insets: 0, 1px;
-fx-background-radius: 4px;
}
/*******************************************************************************
* *
* Decrypt Name Window
* *
******************************************************************************/
.decrypt-name-window .button-bar {
-fx-min-height:42px;
-fx-max-height:42px;
-fx-background-color: MAIN_BG;
-fx-border-color: transparent transparent CONTROL_BORDER_NORMAL transparent;
-fx-border-width: 0 0 1px 0;
}
.decrypt-name-window .button-bar .button-right {
-fx-border-color: transparent transparent transparent CONTROL_BORDER_NORMAL;
-fx-border-width: 0 0 0 1px;
-fx-background-color: MAIN_BG;
-fx-background-radius: 0px;
-fx-min-height: 42px;
-fx-max-height: 42px;
}
.decrypt-name-window .button-bar .button-right:armed {
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BG_ARMED;
}
.decrypt-name-window .table-view {
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BG_NORMAL;
-fx-background-insets: 0,1;
/* There is some oddness if padding is in em values rather than pixels,
in particular, the left border of the control doesn't show. */
-fx-padding: 1; /* 0.083333em; */
}
.table-view > .placeholder {
-fx-background-color: transparent;
-fx-background-radius: 0px;
}
.table-view > .placeholder > .button {
-fx-border-width: 0;
-fx-border-color: transparent;
-fx-background-radius: 0px;
}
.table-view:focused {
-fx-background-color: CONTROL_BORDER_FOCUSED, CONTROL_BG_NORMAL;
-fx-background-insets: 0, 1;
-fx-background-radius: 0, 0;
/* There is some oddness if padding is in em values rather than pixels,
in particular, the left border of the control doesn't show. */
-fx-padding: 1; /* 0.083333em; */
}
.table-view > .virtual-flow > .scroll-bar:vertical {
-fx-background-insets: 0, 0 0 0 1;
-fx-padding: -1 -1 -1 0;
}
.table-view > .virtual-flow > .corner {
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BG_NORMAL ;
-fx-background-insets: 0, 1 0 0 1;
}
/* Each row in the table is a table-row-cell. Inside a table-row-cell is any
number of table-cell. */
.table-row-cell {
-fx-background-color: GRAY_6, CONTROL_BG_NORMAL;
-fx-background-insets: 0, 0 0 1 0;
-fx-padding: 0.0em; /* 0 */
-fx-text-fill: TEXT_FILL;
}
.table-row-cell:odd {
-fx-background-color: GRAY_6, GRAY_9;
-fx-background-insets: 0, 0 0 1 0;
}
.table-cell {
-fx-padding: 3px 6px 3px 6px;
-fx-background-color: transparent;
-fx-border-color: transparent CONTROL_BORDER_NORMAL transparent transparent;
-fx-border-width: 1px;
-fx-cell-size: 30px;
-fx-text-fill: TEXT_FILL;
-fx-text-overrun: center-ellipsis;
}
.table-view:focused > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled:selected > .table-cell {
-fx-text-fill: TEXT_FILL;
}
/* selected, hover - not specified */
/* selected, focused, hover */
/* selected, focused */
/* selected */
.table-view:focused:cell-selection > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled > .table-cell:selected,
.table-view:focused:cell-selection > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled > .table-cell:focused:selected,
.table-view:focused:cell-selection > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled > .table-cell:focused:selected:hover {
-fx-background-color: CONTROL_PRIMARY_BG_NORMAL, CONTROL_BG_SELECTED;
-fx-background-insets: 0 0 0 0, 1 1 1 3;
-fx-text-fill: TEXT_FILL;
}
/* focused */
.table-view:focused:cell-selection > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled > .table-cell:focused {
-fx-background-color: CONTROL_PRIMARY_BORDER_FOCUSED, CONTROL_PRIMARY_BG_NORMAL , CONTROL_BG_NORMAL;
-fx-background-insets: 0 1 0 0, 1 2 1 1, 2 3 2 2;
-fx-text-fill: TEXT_FILL;
}
/* focused, hover */
.table-view:focused:cell-selection > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled > .table-cell:focused:hover {
-fx-background-color: CONTROL_PRIMARY_BORDER_FOCUSED, CONTROL_PRIMARY_BG_NORMAL , PRIMARY_L2;
-fx-background-insets: 0 1 0 0, 1 2 1 1, 2 3 2 2;
-fx-text-fill: TEXT_FILL;
}
/* hover */
.table-view:cell-selection > .virtual-flow > .clipped-container > .sheet > .table-row-cell:filled > .table-cell:hover {
-fx-background-color: PRIMARY_L2;
-fx-text-fill: TEXT_FILL;
-fx-background-insets: 0 0 1 0;
}
/* The column-resize-line is shown when the user is attempting to resize a column. */
.table-view .column-resize-line {
-fx-background-color: CONTROL_BG_ARMED;
-fx-padding: 0.0em 0.0416667em 0.0em 0.0416667em; /* 0 0.571429 0 0.571429 */
}
/* This is the area behind the column headers. An ideal place to specify background
and border colors for the whole area (not individual column-header's). */
.table-view .column-header-background {
-fx-background-color: GRAY_7;
-fx-padding: 0;
}
/* The column header row is made up of a number of column-header, one for each
TableColumn, and a 'filler' area that extends from the right-most column
to the edge of the tableview, or up to the 'column control' button. */
.table-view .column-header {
-fx-text-fill: TEXT_FILL;
-fx-font-size: 1.083333em; /* 13pt ; 1 more than the default font */
-fx-size: 24;
-fx-border-style: solid;
-fx-border-color:
CONTROL_BORDER_NORMAL
GRAY_5
GRAY_5
transparent;
-fx-border-insets: 0 0 0 0;
-fx-border-width: 0.083333em;
}
.table-view .column-header .label {
-fx-alignment: center;
}
.table-view .empty-table {
-fx-background-color: MAIN_BG;
-fx-font-size: 1.166667em; /* 14pt - 2 more than the default font */
}
}

View File

@@ -1,70 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
<?import org.cryptomator.ui.controls.FormattedLabel?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.Tooltip?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Region?>
<?import javafx.scene.layout.VBox?>
<VBox xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="org.cryptomator.ui.decryptname.DecryptFileNamesViewController"
styleClass="decrypt-name-window"
minWidth="400"
maxWidth="400"
minHeight="145">
<HBox styleClass="button-bar" alignment="CENTER">
<padding>
<Insets left="6"/>
</padding>
<Region HBox.hgrow="ALWAYS"/>
<Button styleClass="button-right" contentDisplay="GRAPHIC_ONLY" onAction="#copyTableToClipboard">
<graphic>
<FontAwesome5IconView glyph="CLIPBOARD" glyphSize="16"/>
</graphic>
<tooltip>
<Tooltip text="%decryptNames.copyTable.tooltip"/>
</tooltip>
</Button>
<Button styleClass="button-right" contentDisplay="GRAPHIC_ONLY" onAction="#clearTable">
<graphic>
<FontAwesome5IconView glyph="TRASH" glyphSize="16"/>
</graphic>
<tooltip>
<Tooltip text="%decryptNames.clearTable.tooltip"/>
</tooltip>
</Button>
</HBox>
<TableView fx:id="cipherToCleartextTable" VBox.vgrow="ALWAYS">
<placeholder>
<Button alignment="CENTER" onAction="#selectFiles" text="${controller.dropZoneText}" contentDisplay="TOP" maxWidth="Infinity" maxHeight="Infinity">
<graphic>
<FontAwesome5IconView glyph="${controller.dropZoneIcon}" glyphSize="16"/>
</graphic>
</Button>
</placeholder>
<columns>
<TableColumn fx:id="ciphertextColumn" prefWidth="${cipherToCleartextTable.width * 0.5}">
<graphic>
<FontAwesome5IconView glyph="LOCK"/>
</graphic>
</TableColumn>
<TableColumn fx:id="cleartextColumn" prefWidth="${cipherToCleartextTable.width * 0.5}">
<graphic>
<FontAwesome5IconView glyph="LOCK_OPEN"/>
</graphic>
</TableColumn>
</columns>
</TableView>
<HBox>
<padding>
<Insets topRightBottomLeft="6"/>
</padding>
<Region HBox.hgrow="ALWAYS"/>
<FormattedLabel styleClass="label-small" format="%decryptNames.copyHint" arg1="${controller.copyToClipboardShortcutString}"/>
</HBox>
</VBox>

View File

@@ -20,7 +20,7 @@
<padding>
<Insets left="6" />
</padding>
<ChoiceBox fx:id="vaultFilterChoiceBox" minWidth="42"/>
<ChoiceBox fx:id="vaultFilterChoiceBox"/>
<Region HBox.hgrow="ALWAYS"/>
<Button styleClass="button-right" onAction="#clearEvents" contentDisplay="GRAPHIC_ONLY">
<graphic>

View File

@@ -1,14 +1,12 @@
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
<?import org.cryptomator.ui.controls.ThroughputLabel?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Tooltip?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Region?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Text?>
<?import javafx.scene.control.Tooltip?>
<?import javafx.geometry.Insets?>
<VBox xmlns:fx="http://javafx.com/fxml"
xmlns="http://javafx.com/javafx"
fx:controller="org.cryptomator.ui.mainwindow.VaultDetailUnlockedController"
@@ -46,37 +44,28 @@
<Region VBox.vgrow="ALWAYS"/>
<HBox alignment="BOTTOM_CENTER">
<StackPane visible="${controller.accessibleViaPath}" managed="${controller.accessibleViaPath}">
<HBox visible="${controller.accessibleViaPath}" managed="${controller.accessibleViaPath}">
<padding>
<Insets topRightBottomLeft="0"/>
</padding>
<Button fx:id="revealEncryptedDropZone" styleClass="drag-n-drop" text="%main.vaultDetail.locateEncryptedFileBtn" minWidth="120" maxWidth="180" prefHeight="72" wrapText="true" textAlignment="CENTER" onAction="#chooseDecryptedFileAndReveal" contentDisplay="TOP" visible="${!controller.ciphertextPathsCopied}" managed="${!controller.ciphertextPathsCopied}">
<Button fx:id="dropZone" styleClass="drag-n-drop" text="%main.vaultDetail.locateEncryptedFileBtn" minWidth="120" maxWidth="180" wrapText="true" textAlignment="CENTER" onAction="#chooseFileAndReveal" contentDisplay="TOP" visible="${!controller.ciphertextPathsCopied}" managed="${!controller.ciphertextPathsCopied}">
<graphic>
<Text styleClass="cryptic-text" text="abc → 101010"/>
<FontAwesome5IconView glyph="FILE_DOWNLOAD" glyphSize="15"/>
</graphic>
<tooltip>
<Tooltip text="%main.vaultDetail.locateEncryptedFileBtn.tooltip"/>
</tooltip>
</Button>
<!-- TODO: instead of showing a button, show on error a small dialog and if copied, show a tooltip -->
<Button styleClass="drag-n-drop" text="%main.vaultDetail.encryptedPathsCopied" minWidth="120" maxWidth="180" prefHeight="72" wrapText="true" textAlignment="CENTER" onAction="#chooseDecryptedFileAndReveal" contentDisplay="TOP" visible="${controller.ciphertextPathsCopied}" managed="${controller.ciphertextPathsCopied}">
<Button styleClass="drag-n-drop" text="%main.vaultDetail.encryptedPathsCopied" minWidth="120" maxWidth="180" wrapText="true" textAlignment="CENTER" onAction="#chooseFileAndReveal" contentDisplay="TOP" visible="${controller.ciphertextPathsCopied}" managed="${controller.ciphertextPathsCopied}">
<graphic>
<FontAwesome5IconView glyph="CHECK" glyphSize="15"/>
</graphic>
</Button>
</StackPane>
<!-- decrypt file name -->
<Button fx:id="decryptNameDropZone" styleClass="drag-n-drop" text="%main.vaultDetail.decryptName.buttonLabel" minWidth="120" maxWidth="180" prefHeight="72" wrapText="true" textAlignment="CENTER" onAction="#showDecryptNameWindow" contentDisplay="TOP">
<graphic>
<Text styleClass="cryptic-text" text="101010 → abc"/>
</graphic>
<tooltip>
<Tooltip text="%main.vaultDetail.decryptName.tooltip"/>
</tooltip>
</Button>
</HBox>
<Region HBox.hgrow="ALWAYS"/>
<Button text="%main.vaultDetail.stats" minWidth="120" onAction="#showVaultStatistics" contentDisplay="BOTTOM" prefHeight="72">
<Button text="%main.vaultDetail.stats" minWidth="120" onAction="#showVaultStatistics" contentDisplay="BOTTOM">
<graphic>
<VBox spacing="6">
<HBox alignment="CENTER_RIGHT" spacing="6">

View File

@@ -425,9 +425,7 @@ main.vaultDetail.stats=Vault Statistics
main.vaultDetail.locateEncryptedFileBtn=Locate Encrypted File
main.vaultDetail.locateEncryptedFileBtn.tooltip=Choose a file from your vault to locate its encrypted counterpart
main.vaultDetail.encryptedPathsCopied=Paths Copied to Clipboard!
main.vaultDetail.locateEncrypted.filePickerTitle=Select File Inside Vault
main.vaultDetail.decryptName.buttonLabel=Decrypt File Name
main.vaultDetail.decryptName.tooltip=Choose an encrypted vault file to decrypt its name
main.vaultDetail.filePickerTitle=Select File Inside Vault
### Missing
main.vaultDetail.missing.info=Cryptomator could not find a vault at this path.
main.vaultDetail.missing.recheck=Recheck
@@ -583,25 +581,12 @@ shareVault.hub.instruction.1=1. Share access of the encrypted vault folder via c
shareVault.hub.instruction.2=2. Grant access to team member in Cryptomator Hub.
shareVault.hub.openHub=Open Cryptomator Hub
# Decrypt File Names
decryptNames.title=Decrypt File Names
decryptNames.filePicker.title=Select encrypted file
decryptNames.filePicker.extensionDescription=Cryptomator encrypted file
decryptNames.copyTable.tooltip=Copy table
decryptNames.clearTable.tooltip=Clear table
decryptNames.copyHint=Copy cell content with %s
decryptNames.dropZone.message=Drop files or click to select
decryptNames.dropZone.error.vaultInternalFiles=Vault internal files with no decrypt-able name selected
decryptNames.dropZone.error.foreignFiles=Files do not belong to vault "%s"
decryptNames.dropZone.error.noDirIdBackup=Directory of selected files does not contain dirId.c9r file
decryptNames.dropZone.error.generic=Failed to decrypt file names
# Event View
eventView.title=Events
eventView.filter.allVaults=All
eventView.clearListButton.tooltip=Clear list
eventView.clearListButton.tooltip=Dismiss all
## event list entries
eventView.entry.vaultLocked.message=***********
eventView.entry.vaultLocked.description=Unlock "%s" for details
eventView.entry.conflictResolved.message=Resolved conflict
eventView.entry.conflictResolved.showDecrypted=Show decrypted file

View File

@@ -121,10 +121,3 @@
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=تجاهل
## Button
generic.button.apply=تطبيق
generic.button.back=رجوع
@@ -177,7 +176,6 @@ 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=للمتابعة، يرجى إكمال الخطوات المطلوبة في
@@ -283,7 +281,7 @@ preferences.title=تفضيلات
## General
preferences.general=عام
preferences.general.startHidden=إخفاء النافذة عند بدء تشغيل Cryptomator
preferences.general.autoCloseVaults=اقفل المخازن دون السؤال عند الإقلاع عن التطبيق
preferences.general.autoCloseVaults=اقفل الخزانات المفتوحة تلقائياً عند الإقلاع عن التطبيق
preferences.general.debugLogging=تمكين سجلات التصحيح
preferences.general.debugDirectory=عرض ملفات السجل
preferences.general.autoStart=تشغيل Cryptomator عند بدء تشغيل النظام
@@ -423,6 +421,7 @@ main.vaultDetail.stats=إحصائيات الخزنة
main.vaultDetail.locateEncryptedFileBtn=تحديد موقع الملف المشفر
main.vaultDetail.locateEncryptedFileBtn.tooltip=اختر ملف من خزانتك لتحديد مكان نظيره المشفر
main.vaultDetail.encryptedPathsCopied=تم نسخ مسارات الملفات إلى الحافظة!
main.vaultDetail.filePickerTitle=إختر الملف من الخزنة
### Missing
main.vaultDetail.missing.info=لم يتمكن Cryptomator من العثور على خزنة في هذا المسار.
main.vaultDetail.missing.recheck=إعادة الفحص
@@ -553,10 +552,6 @@ dokanySupportEnd.description=نوع وحدة التخزين Dokany لم يعد
dokanySupportEnd.preferencesBtn=فتح التفضيلات
#Retry If Readonly
retryIfReadonly.title=الوصول إلى المخزن المقيّد
retryIfReadonly.message=لا يوجد وصول للكتابة إلى مجلد المخزن
retryIfReadonly.description=Cryptomator لا يمكنه الكتابة إلى دليل المخزن. يمكنك تغيير المخزن ليكون للقراءة فقط وحاول مرة أخرى. يمكن تعطيل هذا الخيار في خيارات المخزن.
retryIfReadonly.retry=غيّر وأعد المحاولة
# Share Vault
shareVault.title=مشاركة الخزانة
@@ -576,10 +571,4 @@ shareVault.hub.message=كيفية مشاركة خزانة Hub
shareVault.hub.description=لمشاركة محتوى الخزانة مع عضو آخر في الفريق، عليك القيام بخطوتين:
shareVault.hub.instruction.1=1. شارك الوصول إلى مجلد الخزانة المشفر عبر التخزين السحابي.
shareVault.hub.instruction.2=2. امنح الوصول لعضو الفريق في Cryptomator Hub.
shareVault.hub.openHub=زيارة Cryptomator Hub
# Decrypt File Names
# Event View
## event list entries
shareVault.hub.openHub=زيارة Cryptomator Hub

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Кире ҡаҡ
## Button
generic.button.apply=Ҡуллан
generic.button.back=Артҡа
@@ -270,6 +269,7 @@ preferences.title=Көйләүҙәр
## General
preferences.general=Дөйөм
preferences.general.startHidden=Cryptomator башланған саҡта тәҙрәне йәшерергә
preferences.general.autoCloseVaults=Ҡушымтанан сыҡҡан ваҡытта һаҡлағыстарҙы автоматик рәүештә бикләргә
preferences.general.debugLogging=Төҙөкләндереү журналын асырға
preferences.general.debugDirectory=Журнал файлдарын күрһәт
preferences.general.autoStart=Система стартында Cryptomator-ҙы эшләтеп ебәрергә
@@ -389,6 +389,7 @@ main.vaultDetail.stats=Һаҡлағыс статистикаһы
main.vaultDetail.locateEncryptedFileBtn=Шифрланған файлды тап
main.vaultDetail.locateEncryptedFileBtn.tooltip=Шифрланған аналогын табыр өсөн һаҡлағыстан файл һайлағыҙ
main.vaultDetail.encryptedPathsCopied=Юлдарҙын Clipboard-ҡа күсермәһе алынды!
main.vaultDetail.filePickerTitle=Һаҡлағыс эсендә файл һайлау
### Missing
main.vaultDetail.missing.info=Cryptomator был юлдан һаҡлағыс таба алманы.
main.vaultDetail.missing.recheck=Яңынан тикшер
@@ -517,10 +518,3 @@ dokanySupportEnd.preferencesBtn=Көйләүҙәрҙе ас
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Адхіліць
## Button
generic.button.apply=Ужыць
generic.button.back=Назад
@@ -259,6 +258,7 @@ preferences.title=Налады
## General
preferences.general=Агульныя
preferences.general.startHidden=Хаваць акно пры запуску Cryptomator
preferences.general.autoCloseVaults=Замыкаць адчыненыя скарбніцы аўтаматычна пры выхадзе з праграмы
preferences.general.debugLogging=Уключыць пратакаляванне адладкі
preferences.general.debugDirectory=Паказаць файлы пратаколу
preferences.general.autoStart=Запускаць Cryptomator падчас запуску сістэмы
@@ -376,6 +376,7 @@ main.vaultDetail.stats=Статыстыка скарбніцы
main.vaultDetail.locateEncryptedFileBtn=Знайсці зашыфраваны файл
main.vaultDetail.locateEncryptedFileBtn.tooltip=Абяры файл у тваёй скрабніцы, каб знайсці ягоны зашыфраваны адпаведнік
main.vaultDetail.encryptedPathsCopied=Шлях скапіяваны ў буфер абмену!
main.vaultDetail.filePickerTitle=Абраць файл унутры скарбніцы
### Missing
main.vaultDetail.missing.info=Cryptomator ня змог знайсці скарбніцу па гэтай сцежцы.
main.vaultDetail.missing.recheck=Пераправерыць
@@ -497,10 +498,3 @@ dokanySupportEnd.preferencesBtn=Адчыніць налады
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Отхвърляне
## Button
generic.button.apply=Прилагане
generic.button.back=Назад
@@ -270,11 +269,11 @@ preferences.title=Настройки
## General
preferences.general=Общи
preferences.general.startHidden=Скриване на прозореца при отваряне на Криптоматор
preferences.general.autoCloseVaults=Заключване на хранилищата при затваряне на приложението
preferences.general.debugLogging=Дневник за отстраняване на дефекти
preferences.general.debugDirectory=Файлове на дневниците
preferences.general.autoStart=Отваряне на Криптоматор при старт на системата
preferences.general.keychainBackend=Съхраняванеа паролите в
preferences.general.quickAccessService=Добавяне на отключените хранилища в зоната за бърз достъп
## Interface
preferences.interface=Външен вид
preferences.interface.theme=Тема
@@ -390,6 +389,7 @@ main.vaultDetail.stats=Статистики на хранилището
main.vaultDetail.locateEncryptedFileBtn=Намиране на шифровани файлове
main.vaultDetail.locateEncryptedFileBtn.tooltip=Изберете файл от хранилището, за да бъде намерено шифрованото му копие
main.vaultDetail.encryptedPathsCopied=Пътищата са копирани!
main.vaultDetail.filePickerTitle=Изберете файл от хранилището
### Missing
main.vaultDetail.missing.info=Криптоматор не намира хранилище на това място.
main.vaultDetail.missing.recheck=Повторен опит
@@ -518,10 +518,3 @@ dokanySupportEnd.preferencesBtn=Към настройките
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -185,10 +185,3 @@ vaultOptions.mount.mountPoint.directoryPickerButton=নির্বাচন ক
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -321,10 +321,3 @@ quit.lockAndQuitBtn=Zaključaj i zatvori
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Descartar
## Button
generic.button.apply=Aplica
generic.button.back=Enrere
@@ -177,7 +176,6 @@ hub.registerFailed.description.generic=S'ha produït un error en el procés de r
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=No estàs autoritzat a obrir aquesta caixa forta. Contacta amb el seu propietari per obtenir accés.
### 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
@@ -283,7 +281,7 @@ preferences.title=Preferències
## General
preferences.general=General
preferences.general.startHidden=Amaga la finestra quan s'inicia Cryptomator
preferences.general.autoCloseVaults=Bloca les caixes fortes sense preguntar-ho en sortir de l'aplicació
preferences.general.autoCloseVaults=Bloquejar les caixes fortes automàticament quan surti de l'aplicació
preferences.general.debugLogging=Habilita el registre de depuració
preferences.general.debugDirectory=Mostra els fitxers de registres
preferences.general.autoStart=Executa Cryptomator en engegar el sistema
@@ -342,7 +340,6 @@ preferences.contribute.sponsor=Patrocinador
### Remove License Key Dialog
removeCert.title=Suprimeix certificat
removeCert.message=Eliminar certificat de col·laborador?
removeCert.description=Les característiques principals de Cryptomator no es veuen afectades per això. Ni l'accés a les vostres caixes fortes s'ha restringit ni el nivell de seguretat ha estat rebaixat.
#<-- Add entries for donations and code/translation/documentation contribution -->
@@ -423,6 +420,7 @@ main.vaultDetail.stats=Estadístiques de la caixa forta
main.vaultDetail.locateEncryptedFileBtn=Trobar fitxer xifrat
main.vaultDetail.locateEncryptedFileBtn.tooltip=Esculli un fitxer de la caixa forta per trobar el seu homòleg xifrat
main.vaultDetail.encryptedPathsCopied=Rutes copiades al porta-retalls!
main.vaultDetail.filePickerTitle=Seleccioni un fitxer dins la caixa forta
### Missing
main.vaultDetail.missing.info=Cryptomator no ha trobat una caixa forta en aquesta ruta.
main.vaultDetail.missing.recheck=Torna a comprovar
@@ -547,9 +545,6 @@ updateReminder.yesOnce=Sí, una vegada
updateReminder.yesAutomatically=Sí, automàticament
#Dokany Support End
dokanySupportEnd.title=Avís d'obsolescència
dokanySupportEnd.message=Fi de la compatibilitat amb Dokany
dokanySupportEnd.description=El tipus de volum Dokany ja no és compatible amb Cryptomator. La teva configuració canviarà al tipus de volum predeterminat. Pots veure el tipus de volum predeterminat en la configuració.
dokanySupportEnd.preferencesBtn=Obrir les Preferències
#Retry If Readonly
@@ -572,10 +567,4 @@ 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
# Decrypt File Names
# Event View
## event list entries
shareVault.hub.openHub=Obre Cryptomator Hub

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Zrušit
## Button
generic.button.apply=Použít
generic.button.back=Zpět
@@ -273,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
@@ -390,6 +390,7 @@ 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
@@ -533,10 +534,4 @@ 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
# Decrypt File Names
# Event View
## event list entries
shareVault.hub.openHub=Otevřít Cryptomator Hub

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Luk
## Button
generic.button.apply=Anvend
generic.button.back=Tilbage
@@ -283,6 +282,7 @@ preferences.title=Præferencer
## General
preferences.general=Generelt
preferences.general.startHidden=Skjul vinduet når Cryptomator starter
preferences.general.autoCloseVaults=Lås åbne bokse automatisk, når programmet afsluttes
preferences.general.debugLogging=Aktivér fejllogning
preferences.general.debugDirectory=Vis logfiler
preferences.general.autoStart=Start Cryptomator automatisk ved opstart
@@ -407,6 +407,7 @@ main.vaultDetail.stats=Boks statistik
main.vaultDetail.locateEncryptedFileBtn=Find Krypteret Fil
main.vaultDetail.locateEncryptedFileBtn.tooltip=Vælg en fil fra din boks for at finde dens krypterede modpart
main.vaultDetail.encryptedPathsCopied=Stier kopieret!
main.vaultDetail.filePickerTitle=Vælg fil inde i boks
### Missing
main.vaultDetail.missing.info=Cryptomator kunne ikke finde en boks på denne sti.
main.vaultDetail.missing.recheck=Kontrollér igen
@@ -553,10 +554,4 @@ 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
# Decrypt File Names
# Event View
## event list entries
shareVault.hub.openHub=Åben Cryptomator Hub

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Verwerfen
## Button
generic.button.apply=Übernehmen
generic.button.back=Zurück
@@ -177,7 +176,6 @@ hub.registerFailed.description.generic=Im Registrierungsprozess ist ein Fehler a
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=Du bist nicht berechtigt, diesen Tresor zu öffnen. Wende dich an den Tresoreigentümer, um Zugriff zu erhalten.
### Requires Account Initialization
hub.requireAccountInit.message=Aktion erforderlich
hub.requireAccountInit.description.0=Um fortzufahren, führe bitte die erforderlichen Schritte in deinem
@@ -395,7 +393,6 @@ main.vaultlist.contextMenu.vaultoptions=Tresoroptionen anzeigen
main.vaultlist.contextMenu.reveal=Laufwerk anzeigen
main.vaultlist.addVaultBtn.menuItemNew=Neuen Tresor erstellen...
main.vaultlist.addVaultBtn.menuItemExisting=Bestehenden Tresor öffnen...
main.vaultlist.showEventsButton.tooltip=Ereignis-Ansicht öffnen
##Notificaition
main.notification.updateAvailable=Eine neue Version ist verfügbar.
main.notification.support=Unterstütze Cryptomator.
@@ -424,9 +421,7 @@ main.vaultDetail.stats=Tresorstatistik
main.vaultDetail.locateEncryptedFileBtn=Verschlüsselte Datei finden
main.vaultDetail.locateEncryptedFileBtn.tooltip=Wähle eine Datei aus deinem Tresor aus, um das verschlüsselte Gegenstück zu finden
main.vaultDetail.encryptedPathsCopied=Pfade in Zwischenablage kopiert!
main.vaultDetail.locateEncrypted.filePickerTitle=Datei im Tresor auswählen
main.vaultDetail.decryptName.buttonLabel=Dateiname entschlüsseln
main.vaultDetail.decryptName.tooltip=Wählen eine verschlüsselte Tresordatei, um ihren Namen zu entschlüsseln
main.vaultDetail.filePickerTitle=Datei im Tresor auswählen
### Missing
main.vaultDetail.missing.info=Cryptomator konnte keinen Tresor mit diesem Pfad finden.
main.vaultDetail.missing.recheck=Erneut prüfen
@@ -557,10 +552,6 @@ dokanySupportEnd.description=Der Laufwerkstyp Dokany wird von Cryptomator nicht
dokanySupportEnd.preferencesBtn=Einstellungen öffnen
#Retry If Readonly
retryIfReadonly.title=Eingeschränkter Tresorzugriff
retryIfReadonly.message=Kein Schreibzugriff auf Tresor
retryIfReadonly.description=Cryptomator kann nicht in das Verzeichnis des Tresors schreiben. Du kannst den Tresor auf schreibgeschützt umstellen und es erneut versuchen. Diese Option kann in den Tresoroptionen deaktiviert werden.
retryIfReadonly.retry=Ändern und wiederholen
# Share Vault
shareVault.title=Tresor teilen
@@ -580,43 +571,4 @@ 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
# Decrypt File Names
decryptNames.title=Dateinamen entschlüsseln
decryptNames.filePicker.title=Verschlüsselte Datei auswählen
decryptNames.filePicker.extensionDescription=Cryptomator-verschlüsselte Datei
decryptNames.copyTable.tooltip=Tabelle kopieren
decryptNames.clearTable.tooltip=Tabelle leeren
decryptNames.copyHint=Inhalt der Zelle mit %s kopieren
decryptNames.dropZone.message=Dateien ablegen oder zum Auswählen klicken
decryptNames.dropZone.error.vaultInternalFiles=Tresor interne Dateien mit nicht-entschlüsselbaren Namen ausgewählt
decryptNames.dropZone.error.foreignFiles=Dateien gehören nicht zum Tresor "%s"
decryptNames.dropZone.error.noDirIdBackup=Verzeichnis der ausgewählten Dateien enthält keine dirId.c9r Datei
decryptNames.dropZone.error.generic=Fehler beim Entschlüsseln der Dateinamen
# Event View
eventView.title=Ereignisse
eventView.filter.allVaults=Alle
eventView.clearListButton.tooltip=Liste leeren
## event list entries
eventView.entry.vaultLocked.description=Entsperre "%s" für Details
eventView.entry.conflictResolved.message=Konflikt gelöst
eventView.entry.conflictResolved.showDecrypted=Entschlüsselte Datei anzeigen
eventView.entry.conflictResolved.copyDecrypted=Pfad der entschlüsselten Datei kopieren
eventView.entry.conflict.message=Konfliktlösung fehlgeschlagen
eventView.entry.conflict.showDecrypted=Entschlüsselte, ursprüngliche Datei anzeigen
eventView.entry.conflict.copyDecrypted=Entschlüsselten, ursprünglicher Pfad kopieren
eventView.entry.conflict.showEncrypted=Zeige verschlüsselte Konfliktdatei
eventView.entry.conflict.copyEncrypted=Verschlüsselten Konfliktpfad kopieren
eventView.entry.decryptionFailed.message=Entschlüsselung fehlgeschlagen
eventView.entry.decryptionFailed.showEncrypted=Verschlüsselte Datei anzeigen
eventView.entry.decryptionFailed.copyEncrypted=Pfad der verschlüsselten Datei kopieren
eventView.entry.brokenDirFile.message=Ungültiger Verzeichnislink
eventView.entry.brokenDirFile.showEncrypted=Defekten, verschlüsselten Link anzeigen
eventView.entry.brokenDirFile.copyEncrypted=Pfad des ungültigen Links kopieren
eventView.entry.brokenFileNode.message=Fehlender Dateisystemknoten
eventView.entry.brokenFileNode.showEncrypted=Beschädigten, verschlüsselten Knoten anzeigen
eventView.entry.brokenFileNode.copyEncrypted=Pfad des kaputten, verschlüsselten Knotens kopieren
eventView.entry.brokenFileNode.copyDecrypted=Pfad der entschlüsselten Datei kopieren
shareVault.hub.openHub=Cryptomator Hub öffnen

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Παράβλεψη
## Button
generic.button.apply=Εφαρμογή
generic.button.back=Πίσω
@@ -283,7 +282,7 @@ preferences.title=Προτιμήσεις
## General
preferences.general=Γενικά
preferences.general.startHidden=Απόκρυψη παραθύρου όταν ξεκινά το Cryptomator
preferences.general.autoCloseVaults=Κλείδωμα κρυπτών χωρίς ερώτηση κατά την έξοδο από την εφαρμογή
preferences.general.autoCloseVaults=Αυτόματο κλείδωμα ανοιγμένης κρύπτης κατά την έξοδο της εφαρμογής
preferences.general.debugLogging=Ενεργοποίηση καταγραφής σφαλμάτων
preferences.general.debugDirectory=Αποκάλυψη αρχείων καταγραφής
preferences.general.autoStart=Εκκίνηση Cryptomator στην εκκίνηση του συστήματος
@@ -423,6 +422,7 @@ main.vaultDetail.stats=Στατιστικά Vault
main.vaultDetail.locateEncryptedFileBtn=Εντοπισμός Κρυπτογραφημένου Αρχείου
main.vaultDetail.locateEncryptedFileBtn.tooltip=Επιλέξτε ένα αρχείο από την κρύπτη σας για να εντοπίσετε το κρυπτογραφημένο αντίστοιχο
main.vaultDetail.encryptedPathsCopied=Οι Διαδρομές Αντιγράφηκαν στο Πρόχειρο!
main.vaultDetail.filePickerTitle=Επιλογή Αρχείου Μέσα Στην Κρύπτη
### Missing
main.vaultDetail.missing.info=Cryptomator δεν βρήκε vault σε αυτόν τον κατάλογο.
main.vaultDetail.missing.recheck=Επανέλεγχος
@@ -576,11 +576,4 @@ shareVault.hub.message=Πώς να μοιραστείτε μια κρύπτη Hu
shareVault.hub.description=Για να μοιραστείτε το περιεχόμενο της κρύπτης με άλλο μέλος της ομάδας, πρέπει να εκτελέσετε δύο βήματα:
shareVault.hub.instruction.1=1. Μοιραστείτε την πρόσβαση στον κρυπτογραφημένο φάκελο κρύπτης μέσω του χώρου αποθήκευσης στο cloud.
shareVault.hub.instruction.2=2. Παραχωρήστε πρόσβαση σε μέλος της ομάδας στο Cryptomator Hub.
shareVault.hub.openHub=Ανοίξτε το Cryptomator Hub
# Decrypt File Names
# Event View
eventView.filter.allVaults=Όλες
## event list entries
shareVault.hub.openHub=Ανοίξτε το Cryptomator Hub

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Descartar
## Button
generic.button.apply=Aplicar
generic.button.back=Volver
@@ -283,7 +282,7 @@ preferences.title=Preferencias
## General
preferences.general=General
preferences.general.startHidden=Ocultar ventana al iniciar Cryptomator
preferences.general.autoCloseVaults=Bloquear bóvedas sin preguntar al salir de la aplicación
preferences.general.autoCloseVaults=Bloquear automáticamente las bóvedas abiertas al salir de la aplicación
preferences.general.debugLogging=Habilitar registro de depuración
preferences.general.debugDirectory=Revelar archivos de registro
preferences.general.autoStart=Cargar Cryptomator al iniciar el sistema
@@ -395,7 +394,6 @@ main.vaultlist.contextMenu.vaultoptions=Mostrar opciones de la bóveda
main.vaultlist.contextMenu.reveal=Revelar unidad
main.vaultlist.addVaultBtn.menuItemNew=Crear Bóveda Nueva...
main.vaultlist.addVaultBtn.menuItemExisting=Abrir Bóveda Existente...
main.vaultlist.showEventsButton.tooltip=Abrir vista de evento
##Notificaition
main.notification.updateAvailable=Existen actualizaciones disponibles.
main.notification.support=Soporte de Cryptomator.
@@ -424,9 +422,7 @@ main.vaultDetail.stats=Estadísticas de la bóveda
main.vaultDetail.locateEncryptedFileBtn=Ubicar archivo cifrado
main.vaultDetail.locateEncryptedFileBtn.tooltip=Elija un archivo de su bóveda para ubicar su contraparte cifrada
main.vaultDetail.encryptedPathsCopied=¡Rutas copiadas al portapapeles!
main.vaultDetail.locateEncrypted.filePickerTitle=Seleccionar archivo dentro de la bóveda
main.vaultDetail.decryptName.buttonLabel=Descifrar nombre de archivo
main.vaultDetail.decryptName.tooltip=Elija un archivo de bóveda cifrado para descifrar su nombre
main.vaultDetail.filePickerTitle=Seleccionar archivo dentro de la bóveda
### Missing
main.vaultDetail.missing.info=Cryptomator no pudo encontrar una bóveda en esta ruta.
main.vaultDetail.missing.recheck=Volver a comprobar
@@ -580,43 +576,4 @@ 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
# Decrypt File Names
decryptNames.title=Descifrar nombre de archivos
decryptNames.filePicker.title=Seleccione archivo cifrado
decryptNames.filePicker.extensionDescription=Archivo cifrado Cryptomator
decryptNames.copyTable.tooltip=Copiar tabla
decryptNames.clearTable.tooltip=Limpiar tabla
decryptNames.copyHint=Copiar contenido de celda con %s
decryptNames.dropZone.message=Soltar archivos o hacer clic para seleccionar
decryptNames.dropZone.error.vaultInternalFiles=Archivos internos de la bóveda sin nombre descifrable seleccionado
decryptNames.dropZone.error.foreignFiles=Los archivos no pertenecen a la bóveda "%s"
decryptNames.dropZone.error.noDirIdBackup=El directorio de los archivos seleccionados no contiene el archivo dirId.c9r
decryptNames.dropZone.error.generic=Error al descifrar nombre de archivos
# Event View
eventView.title=Eventos
eventView.filter.allVaults=Todos
eventView.clearListButton.tooltip=Borrar lista
## event list entries
eventView.entry.vaultLocked.description=Desbloquear "%s" para más detalles
eventView.entry.conflictResolved.message=Conflicto resuelto
eventView.entry.conflictResolved.showDecrypted=Mostrar archivo descifrado
eventView.entry.conflictResolved.copyDecrypted=Copiar ruta descifrada
eventView.entry.conflict.message=Resolución de conflictos fallida
eventView.entry.conflict.showDecrypted=Mostrar archivo descifrado, original
eventView.entry.conflict.copyDecrypted=Copiar ruta descifrada, original
eventView.entry.conflict.showEncrypted=Mostrar archivo en conflicto, cifrado
eventView.entry.conflict.copyEncrypted=Copiar ruta en conflicto, cifrada
eventView.entry.decryptionFailed.message=Desencriptación fallida
eventView.entry.decryptionFailed.showEncrypted=Mostrar archivo cifrado
eventView.entry.decryptionFailed.copyEncrypted=Copiar ruta cifrada
eventView.entry.brokenDirFile.message=Enlace de directorio roto
eventView.entry.brokenDirFile.showEncrypted=Mostrar enlace roto, cifrado
eventView.entry.brokenDirFile.copyEncrypted=Copiar ruta del enlace roto
eventView.entry.brokenFileNode.message=Nodo de sistema de archivos roto
eventView.entry.brokenFileNode.showEncrypted=Mostrar nodo roto, cifrado
eventView.entry.brokenFileNode.copyEncrypted=Copiar ruta del enlace roto, encriptado
eventView.entry.brokenFileNode.copyDecrypted=Copiar ruta descifrada
shareVault.hub.openHub=Abrir Cryptomator Hub

View File

@@ -1,9 +1,8 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=لغو
## Button
generic.button.apply=اعمال
generic.button.apply=درخواست
generic.button.back=بازگشت
generic.button.cancel=انصراف
generic.button.change=تغییر
@@ -107,14 +106,11 @@ addvaultwizard.existing.chooseBtn=انتخاب کنید…
unlock.unlockBtn=بازکردن قفل
## Select
## Success
unlock.success.revealBtn=نمایش درایو
## Failure
## Hub
hub.noKeychain.openBtn=باز کردن تنظیمات
### Waiting
### Receive Key
### Register Device
hub.register.message=دستگاه جدید
### Register Device Legacy
### Registration Success
hub.registerSuccess.unlockBtn=بازکردن قفل
@@ -174,13 +170,11 @@ preferences.updates.upToDate=Cryptomator به روز می باشد.
# Main Window
## Vault List
main.vaultlist.contextMenu.lock=قفل
main.vaultlist.contextMenu.reveal=نمایش درایو
##Notificaition
## Vault Detail
### Welcome
### Locked
### Unlocked
main.vaultDetail.revealBtn=نمایش درایو
main.vaultDetail.lockBtn=قفل
### Missing
### Needs Migration
@@ -191,7 +185,6 @@ main.vaultDetail.lockBtn=قفل
# Vault Options
## General
vaultOptions.general.vaultName=نام گاوصندوق
vaultOptions.general.actionAfterUnlock.reveal=نمایش درایو
## Mount
vaultOptions.mount.mountPoint.directoryPickerButton=انتخاب کنید…
@@ -216,15 +209,7 @@ vaultOptions.mount.mountPoint.directoryPickerButton=انتخاب کنید…
# Update Reminder
#Dokany Support End
dokanySupportEnd.preferencesBtn=باز کردن تنظیمات
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Ohita
## Button
generic.button.apply=Käytä
generic.button.back=Takaisin
@@ -282,6 +281,7 @@ preferences.title=Asetukset
## General
preferences.general=Yleiset
preferences.general.startHidden=Piilota ikkuna kun Cryptomator käynnistyy
preferences.general.autoCloseVaults=Lukitse avoimet holvit automaattisesti kun ohjelma sammutetaan
preferences.general.debugLogging=Ota virheloki käyttöön
preferences.general.debugDirectory=Näytä lokitiedostot
preferences.general.autoStart=Käynnistä Cryptomator järjestelmän käynnistyessä
@@ -419,6 +419,7 @@ main.vaultDetail.stats=Holvin tilastot
main.vaultDetail.locateEncryptedFileBtn=Etsi salattu tiedosto
main.vaultDetail.locateEncryptedFileBtn.tooltip=Valitse tiedosto holvistasi löytääksesi sen salatun vastineen
main.vaultDetail.encryptedPathsCopied=Polut kopioitu leikepöydälle!
main.vaultDetail.filePickerTitle=Valitse tiedosto holvin sisältä
### Missing
main.vaultDetail.missing.info=Cryptomator ei löytänyt täältä holvia.
main.vaultDetail.missing.recheck=Tarkista uudelleen
@@ -558,10 +559,4 @@ shareVault.visitHub=Käy Cryptomator Hubissa
shareVault.hub.message=Kuinka jakaa Hub -holvi
shareVault.hub.instruction.1=1. Jaa käyttöoikeus salattuun holvikansioon pilvipalvelun kautta.
shareVault.hub.openHub=Avaa Cryptomator Hub
# Decrypt File Names
# Event View
## event list entries
shareVault.hub.openHub=Avaa Cryptomator Hub

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=I-dismiss
## Button
generic.button.apply=I-apply
generic.button.back=Bumalik
@@ -282,6 +281,7 @@ preferences.title=Mga Kagustuhan
## General
preferences.general=Heneral
preferences.general.startHidden=Itago ang window kapag sinimulan ang Cryptomator
preferences.general.autoCloseVaults=Awtomatikong i-lock ang mga bukas na vault kapag huminto sa aplikasyon
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
@@ -410,6 +410,7 @@ main.vaultDetail.stats=Mga Istatistika ng Vault
main.vaultDetail.locateEncryptedFileBtn=Hanapin ang Naka-encrypt na File
main.vaultDetail.locateEncryptedFileBtn.tooltip=Pumili ng file mula sa iyong vault upang mahanap ang naka-encrypt na katapat nito
main.vaultDetail.encryptedPathsCopied=Mga Path na Nakopya sa Clipboard!
main.vaultDetail.filePickerTitle=Piliin ang File Inside Vault
### Missing
main.vaultDetail.missing.info=Hindi makahanap ng vault ang Cryptomator sa landas na ito.
main.vaultDetail.missing.recheck=Suriin muli
@@ -559,10 +560,4 @@ 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
# Decrypt File Names
# Event View
## event list entries
shareVault.hub.openHub=Buksan ang Cryptomator Hub

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Ignorer
## Button
generic.button.apply=Appliquer
generic.button.back=Précédent
@@ -283,7 +282,7 @@ preferences.title=Préférences
## General
preferences.general=Général
preferences.general.startHidden=Démarrer Cryptomator en mode caché
preferences.general.autoCloseVaults=Verrouiller les coffres sans confirmation lors de la fermeture de l'application
preferences.general.autoCloseVaults=Verrouiller automatiquement les coffres ouverts en quittant l'application
preferences.general.debugLogging=Activer les logs debug
preferences.general.debugDirectory=Afficher le journal
preferences.general.autoStart=Lancer Cryptomator au démarrage du système
@@ -343,7 +342,7 @@ preferences.contribute.sponsor=Parrain
### Remove License Key Dialog
removeCert.title=Supprimer le certificat
removeCert.message=Supprimer le certificat de soutien ?
removeCert.description=Les fonctionnalités principales de Cryptomator ne sont pas affectées par cela. L'accès à vos coffres n'est pas restreint et le niveau de sécurité n'est pas diminué.
removeCert.description=
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -395,7 +394,6 @@ main.vaultlist.contextMenu.vaultoptions=Afficher les options du volume chiffré
main.vaultlist.contextMenu.reveal=Afficher le lecteur
main.vaultlist.addVaultBtn.menuItemNew=Créer un nouveau coffre...
main.vaultlist.addVaultBtn.menuItemExisting=Ouvrir un coffre existant...
main.vaultlist.showEventsButton.tooltip=Ouvrir la vue Événements
##Notificaition
main.notification.updateAvailable=Mise à jour disponible.
main.notification.support=Soutenir Cryptomator.
@@ -424,9 +422,7 @@ main.vaultDetail.stats=Statistiques du volume chiffré
main.vaultDetail.locateEncryptedFileBtn=Localiser le fichier chiffré
main.vaultDetail.locateEncryptedFileBtn.tooltip=Choisissez un fichier dans votre coffre pour localiser sa version chiffrée
main.vaultDetail.encryptedPathsCopied=Chemins d'accès copiés dans le presse-papier !
main.vaultDetail.locateEncrypted.filePickerTitle=Sélectionner le fichier dans le coffre
main.vaultDetail.decryptName.buttonLabel=Déchiffrer le nom d'un fichier
main.vaultDetail.decryptName.tooltip=Choisir un fichier de coffre chiffré pour déchiffrer son nom
main.vaultDetail.filePickerTitle=Sélectionner le fichier dans le coffre
### Missing
main.vaultDetail.missing.info=Cryptomator n'a pas pu trouver de volume chiffré dans ce chemin d'accès.
main.vaultDetail.missing.recheck=Revérifier
@@ -580,42 +576,4 @@ 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
# Decrypt File Names
decryptNames.title=Déchiffrer les noms de fichiers
decryptNames.filePicker.title=Sélectionner le fichier chiffré
decryptNames.filePicker.extensionDescription=Fichier chiffré Cryptomator
decryptNames.copyTable.tooltip=Copier le tableau
decryptNames.clearTable.tooltip=Effacer le tableau
decryptNames.copyHint=Copier le contenu de la cellule avec %s
decryptNames.dropZone.message=Déposer des fichiers ou cliquer pour en sélectionner
decryptNames.dropZone.error.foreignFiles=Les fichiers n'appartiennent pas au coffre « %s »
decryptNames.dropZone.error.noDirIdBackup=Le répertoire des fichiers sélectionnés ne contient pas de fichier dirId.c9r
decryptNames.dropZone.error.generic=Impossible de déchiffrer les noms de fichiers
# Event View
eventView.title=Événements
eventView.filter.allVaults=Tous
eventView.clearListButton.tooltip=Effacer la liste
## event list entries
eventView.entry.vaultLocked.description=Déverrouillez "%s" pour plus de détails
eventView.entry.conflictResolved.message=Conflit résolu
eventView.entry.conflictResolved.showDecrypted=Afficher le fichier déchiffré
eventView.entry.conflictResolved.copyDecrypted=Copier le chemin déchiffré
eventView.entry.conflict.message=La résolution des conflits a échoué
eventView.entry.conflict.showDecrypted=Afficher le fichier original déchiffré
eventView.entry.conflict.copyDecrypted=Copier le chemin original déchiffré
eventView.entry.conflict.showEncrypted=Afficher le fichier chiffré en conflit
eventView.entry.conflict.copyEncrypted=Copier le chemin chiffré en conflit
eventView.entry.decryptionFailed.message=Le déchiffrement a échoué
eventView.entry.decryptionFailed.showEncrypted=Afficher le fichier chiffré
eventView.entry.decryptionFailed.copyEncrypted=Copier le chemin chiffré
eventView.entry.brokenDirFile.message=Lien de répertoire cassé
eventView.entry.brokenDirFile.showEncrypted=Afficher le lien chiffré cassé
eventView.entry.brokenDirFile.copyEncrypted=Copier le chemin du lien cassé
eventView.entry.brokenFileNode.message=Nœud de système de fichiers cassé
eventView.entry.brokenFileNode.showEncrypted=Afficher le nœud chiffré cassé
eventView.entry.brokenFileNode.copyEncrypted=Copier le chemin du nœud chiffré cassé
eventView.entry.brokenFileNode.copyDecrypted=Copier le chemin déchiffré
shareVault.hub.openHub=Ouvrir le Hub Cryptomator

View File

@@ -135,10 +135,3 @@ lock.forced.retryBtn=Tentar de novo
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=שחרור
## Button
generic.button.apply=החל
generic.button.back=חזור
@@ -49,7 +48,6 @@ addvaultwizard.new.nameInstruction=בחירת שם עבור הכספת
addvaultwizard.new.namePrompt=שם הכספת
### Location
addvaultwizard.new.locationInstruction=היכן Cryptomator צריך לשמור את הקבצים המוצפנים של הכספת שלך?
addvaultwizard.new.locationLoading=בודק מערכת קבצים מקומית עבור ספריות ברירת מחדל לאחסון ענן…
addvaultwizard.new.locationLabel=מיקום אחסון
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=מיקום מותאם אישית
@@ -262,6 +260,7 @@ preferences.title=העדפות
## General
preferences.general=כללי
preferences.general.startHidden=הסתר את החלון בהפעלת Cryptomator
preferences.general.autoCloseVaults=נעל vaults פתוחים באופן אוטומטי בעת יציאה מהאפליקציה
preferences.general.debugLogging=אפשר רישום יומן באגים
preferences.general.debugDirectory=הצג קבצי יומן
preferences.general.autoStart=הפעלת Cryptomator עם הפעלת המערכת
@@ -379,6 +378,7 @@ main.vaultDetail.stats=סטטיסטיקת הכספת
main.vaultDetail.locateEncryptedFileBtn=מצא קבצים מוצפנים
main.vaultDetail.locateEncryptedFileBtn.tooltip=בחר קובץ מהכספת שלך על מנת לאתר את הקובץ התואם המוצפן
main.vaultDetail.encryptedPathsCopied=הנתיבים הועתקו ללוח!
main.vaultDetail.filePickerTitle=בחר קובץ בתוך הכספת
### Missing
main.vaultDetail.missing.info=Cryptomator לא הצליח למצוא כספת בנתיב זה.
main.vaultDetail.missing.recheck=בדיקה נוספת
@@ -494,10 +494,3 @@ dokanySupportEnd.preferencesBtn=פתח העדפות
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=खारिज करें
## Button
generic.button.apply=लागू करें
generic.button.back=पीछे जाएं
@@ -200,6 +199,7 @@ health.result.severityFilter.crit=गंभीर
preferences.title=प्राथमिकताएं
## General
preferences.general=सामान्य
preferences.general.autoCloseVaults=एप्लीकेशन बंद करते समय खुली हुई वॉल्ट्स को अपने आप लॉक करें
preferences.general.autoStart=क्रिप्टोमेटर को सिस्टम स्टार्ट पे खोले
## Interface
preferences.interface.theme.automatic=ऑटोमैटिक
@@ -317,10 +317,3 @@ dokanySupportEnd.preferencesBtn=प्राथमिकताएँ खोल
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -384,10 +384,3 @@ quit.lockAndQuitBtn=Zaključaj i napusti
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Elvet
## Button
generic.button.apply=Alkalmaz
generic.button.back=Vissza
@@ -177,7 +176,6 @@ hub.registerFailed.description.generic=Hiba történt a regisztrációs folyamat
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=Nincs hozzáférésed a széf megnyitásához. Vedd fel a kapcsolatot a széf tulajdonosával és kérj 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
@@ -283,7 +281,7 @@ preferences.title=Beállítások
## General
preferences.general=Általános
preferences.general.startHidden=Az ablak elrejtése a Cryptomator indítása után
preferences.general.autoCloseVaults=Széfek lezárása megerősítés nélkül az alkalmazás bezárásakor
preferences.general.autoCloseVaults=A széfek automatikus lezárása az alkalmazás bezárásakor
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
@@ -423,6 +421,7 @@ main.vaultDetail.stats=Széf statisztika
main.vaultDetail.locateEncryptedFileBtn=Titkosított fájl megkeresése
main.vaultDetail.locateEncryptedFileBtn.tooltip=Válasszon a széfből egy fájlt a titkosított megfelelőjének megkereséséhez
main.vaultDetail.encryptedPathsCopied=Az útvonal a vágólapra került!
main.vaultDetail.filePickerTitle=Fájl választása a széfben
### Missing
main.vaultDetail.missing.info=A Cryptomator nem talált széfet ezen az útvonalon.
main.vaultDetail.missing.recheck=Ellenőrizze újra
@@ -553,10 +552,6 @@ dokanySupportEnd.description=A Cryptomator nem támogatja tovább a Dokany köte
dokanySupportEnd.preferencesBtn=Beállítások megnyitása
#Retry If Readonly
retryIfReadonly.title=Korlátozott Széf Hozzáférés
retryIfReadonly.message=Nincs írási jogod a széf könyvtárához
retryIfReadonly.description=A Cryptomator nem tud a széf könyvtárába írni. Átrakhatod a széfet írásvédettre és megpróbálhatod újra. Ezt az opciót kikapcsolhatod a széf beállításaiban.
retryIfReadonly.retry=Változtatás és Újrapróbálás
# Share Vault
shareVault.title=Széf megosztása
@@ -576,10 +571,4 @@ 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
# Decrypt File Names
# Event View
## event list entries
shareVault.hub.openHub=Nyissa meg a Cryptomator Hubot

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Tutup
## Button
generic.button.apply=Terapkan
generic.button.back=Kembali
@@ -17,19 +16,19 @@ generic.button.print=Cetak
generic.button.remove=Hapus
# Error
error.message=Terjadi kesalahan
error.message=Terjadi kesalahan %s
error.description=Ups! Cryptomator tidak menyangka hal ini terjadi. Anda dapat mencari solusi yang tersedia untuk error ini. Atau jika error ini belum pernah dilaporkan, tidak perlu sungkan untuk melaporkannya.
error.hyperlink.lookup=Cari kesalahan ini
error.hyperlink.report=Laporkan kesalahan ini
error.hyperlink.lookup=Cari tahu informasi lebih lanjut tentang suatu kesalahan
error.hyperlink.report=Laporkan error berikut
error.technicalDetails=Rincian:
error.existingSolutionDescription=Cryptomator tidak menyangka ini terjadi. Tapi telah ditemukan sebuah solusi untuk kesalahan ini. Lihat tautan berikut.
error.hyperlink.solution=Cari tahu solusinya
error.existingSolutionDescription=Maaf, Cryptomator tiba-tiba berhenti. Tapi telah ditemukan sebuah jawaban untuk masalah ini. Lihat tautan berikut.
error.hyperlink.solution=Cari tahu solusi untuk masalah ini
error.lookupPermissionMessage=Cryptomator bisa mencari solusinya secara daring. Ini akan meneruskan pesan ke direktori masalah kami dengan alamat IP Anda.
error.dismiss=Tutup
error.lookUpSolution=Cari tahu solusinya
# Defaults
defaults.vault.vaultName=Brankas
defaults.vault.vaultName=Brangkas
# Tray Menu
traymenu.showMainWindow=Tampilkan
@@ -45,10 +44,10 @@ addvaultwizard.title=Tambah Brankas
## New
addvaultwizard.new.title=Tambah Brankas Baru
### Name
addvaultwizard.new.nameInstruction=Pilih sebuah nama untuk brankas
addvaultwizard.new.nameInstruction=Buat sebuah nama untuk brankas
addvaultwizard.new.namePrompt=Nama Brankas
### Location
addvaultwizard.new.locationInstruction=Di mana Cryptomator mesti menyimpan berkas terenkripsi dari brankas Anda?
addvaultwizard.new.locationInstruction=Dimana Cryptomator seharusnya menyimpan vault berisi file enkripsi Anda?
addvaultwizard.new.locationLoading=Memeriksa sistem file lokal untuk direktori default penyimpanan cloud…
addvaultwizard.new.locationLabel=Lokasi penyimpanan
addvaultwizard.new.locationPrompt=
@@ -72,15 +71,15 @@ addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Buka dokumentasi u
addvaultwizard.new.expertSettings.shorteningThreshold.title=Panjang maksimum nama file terenkripsi
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valid
### Password
addvaultwizard.new.createVaultBtn=Buat Brankas
addvaultwizard.new.createVaultBtn=Buat Brangkas
addvaultwizard.new.generateRecoveryKeyChoice=Anda tidak dapat mengakses data tanpa kata sandi yang Anda miliki. Apa Anda ingin sebuah kunci pemulihan untuk berjaga-jaga jika seandainya Anda kehilangan kata sandi?
addvaultwizard.new.generateRecoveryKeyChoice.yes=Ya tolong, Lebih baik aman daripada menyesal
addvaultwizard.new.generateRecoveryKeyChoice.no=Tidak terima kasih, Saya tidak akan kehilangan kata sandi saya
### Information
addvault.new.readme.storageLocation.fileName=PENTING.rtf
addvault.new.readme.storageLocation.1=⚠️ BERKAS BRANKAS ⚠️
addvault.new.readme.storageLocation.2=Ini adalah lokasi penyimpanan brankas Anda.
addvault.new.readme.storageLocation.3=JANGAN
addvault.new.readme.storageLocation.1=⚠️ FILE VAULT ⚠️
addvault.new.readme.storageLocation.2=Ini adalah lokasi penyimpanan vault Anda.
addvault.new.readme.storageLocation.3=DILARANG
addvault.new.readme.storageLocation.4=• mengubah file apapun di direktori ini, atau
addvault.new.readme.storageLocation.5=• menyalin file untuk dienkripsi ke dalam direktori ini.
addvault.new.readme.storageLocation.6=Jika Anda ingin mengenkripsi file dan melihat isi konten dari vault, lakukan hal berikut:
@@ -98,15 +97,15 @@ addvaultwizard.existing.title=Tambahkan Vault yang Ada
addvaultwizard.existing.instruction=Pilih file "vault.cryptomator" Anda dari vault yang ada. Jika hanya ada file bernama "masterkey.cryptomator", pilih file tersebut.
addvaultwizard.existing.chooseBtn=Pilih…
addvaultwizard.existing.filePickerTitle=Pilih File Vault
addvaultwizard.existing.filePickerMimeDesc=Brankas Cryptomator
addvaultwizard.existing.filePickerMimeDesc=Vault Cryptomator
## Success
addvaultwizard.success.nextStepsInstructions=Vault "%s" telah dibuat.\nAnda harus membuka kunci vault ini untuk mengakses atau menambahkan konten. Anda juga dapat membuka kunci vault ini kapan saja di kemudian hari.
addvaultwizard.success.unlockNow=Buka Kunci Sekarang
# Remove Vault
removeVault.title=Hapus "%s"
removeVault.message=Hapus brankas?
removeVault.description=Tindakan ini hanya akan membuat Cryptomator melupakan brankas ini. Anda dapat menambahkan brankas ini lagi nanti. Berkas yang telah dienkripsi tidak akan dihapus dari hard drive Anda.
removeVault.title=Hapus Vault
removeVault.message=Hapus vault?
removeVault.description=Tindakan ini hanya akan membuat Cryptomator melupakan vault ini. Anda dapat menambahkan vault ini lagi nanti. File yang telah dienkripsi tidak akan dihapus dari hard drive Anda.
# Change Password
changepassword.title=Ubah Kata Sandi
@@ -125,14 +124,14 @@ unlock.passwordPrompt=Masukkan kata sandi "%s":
unlock.savePassword=Ingat Kata Sandi
unlock.unlockBtn=Buka Kunci
## Select
unlock.chooseMasterkey.message=Berkas masterkey tidak ditemukan
unlock.chooseMasterkey.message=File masterkey tidak ditemukan
unlock.chooseMasterkey.description=Tidak dapat menemukan file masterkey untuk vault ini pada lokasi yang dicari. Mohon pilih file kunci secara manual.
unlock.chooseMasterkey.filePickerTitle=Pilih File Masterkey
unlock.chooseMasterkey.filePickerMimeDesc=MasterKey Cryptomator
## Success
unlock.success.message=Buka kunci berhasil
unlock.success.description="%s" berhasil dibuka! Vault Anda sekarang dapat diakses melalui drive virtual.
unlock.success.rememberChoice=Ingat pilihan saya, jangan tanyakan lagi
unlock.success.rememberChoice=Ingat pilihan saya, jangan perlihatkan lagi
unlock.success.revealBtn=Tampilkan Drive
## Failure
unlock.error.customPath.message=Tidak dapat memasang vault ke path kustom
@@ -143,7 +142,7 @@ unlock.error.customPath.description.hideawayNotDir=File sementara dan tersembuny
unlock.error.customPath.description.couldNotBeCleaned=Vault Anda tidak dapat dipasang ke path "%s". Silakan coba lagi atau pilih path yang berbeda.
unlock.error.customPath.description.notEmptyDir=Path kustom pemasangan "%s" bukan folder kosong. Silakan pilih folder kosong dan coba lagi.
unlock.error.customPath.description.generic=Anda telah memilih kustom path pemasangan untuk vault ini, tetapi gagal menggunakannya dengan pesan:%2$s
unlock.error.restartRequired.message=Tidak dapat membuka kunci brankas
unlock.error.restartRequired.message=Tidak dapat membuka kunci vault
unlock.error.restartRequired.description=Ubah jenis volume di opsi vault atau restart Cryptomator.
unlock.error.title=Gagal membuka kunci "%s"
## Hub
@@ -155,7 +154,7 @@ hub.auth.message=Menunggu otentikasi…
hub.auth.description=Anda secara otomatis akan diarahkan ke halaman login.
hub.auth.loginLink=Tidak diarahkan? Klik di sini untuk membukanya.
### Receive Key
hub.receive.message=Memroses respons
hub.receive.message=Respons pemrosesan
hub.receive.description=Cryptomator menerima dan memproses respons dari Hub. Harap tunggu.
### Register Device
hub.register.message=Perangkat Baru
@@ -177,11 +176,10 @@ hub.registerFailed.description.generic=Kesalahan terjadi dalam proses pendaftara
hub.registerFailed.description.deviceAlreadyExists=Perangkat ini sudah terdaftar untuk pengguna lain. Cobalah menggunakan akun pengguna atau perangkat yang berbeda.
### Unauthorized
hub.unauthorized.message=Akses ditolak
hub.unauthorized.description=Anda tidak punya otorisasi untuk membuka brankas ini. Hubungi pemilik brankas untuk meminta akses.
### Requires Account Initialization
hub.requireAccountInit.message=Tindakan diperlukan
hub.requireAccountInit.description.0=Untuk melanjutkan, silakan lengkapi langkah-langkah yang diperlukan dalam
hub.requireAccountInit.description.1=Profil pengguna Hub Anda
hub.requireAccountInit.description.0=Untuk melanjutkan, silakan lengkapi langkah-langkah yang diperlukan
hub.requireAccountInit.description.1=Hub profil pengguna
hub.requireAccountInit.description.2=.
### License Exceeded
hub.invalidLicense.message=Lisensi Hub tidak valid
@@ -283,7 +281,7 @@ preferences.title=Preferensi
## General
preferences.general=Umum
preferences.general.startHidden=Sembunyikan jendela saat memulai Cryptomator
preferences.general.autoCloseVaults=Kunci brankas tanpa bertanya ketika keluar aplikasi
preferences.general.autoCloseVaults=Kunci vault yang terbuka secara otomatis saat aplikasi dihentikan
preferences.general.debugLogging=Aktifkan pencatatan debug
preferences.general.debugDirectory=Perlihatkan file log
preferences.general.autoStart=Jalankan Cryptomator saat sistem dimulai
@@ -423,6 +421,7 @@ main.vaultDetail.stats=Statistik Vault
main.vaultDetail.locateEncryptedFileBtn=Temukan File yang Dienkripsi
main.vaultDetail.locateEncryptedFileBtn.tooltip=Pilih file dari vault Anda untuk menemukan mitra enkripsinya
main.vaultDetail.encryptedPathsCopied=Path Disalin ke Clipboard!
main.vaultDetail.filePickerTitle=Pilih File Didalam Vault
### Missing
main.vaultDetail.missing.info=Cryptomator tidak dapat menemukan vault di path ini.
main.vaultDetail.missing.recheck=Periksa kembali
@@ -553,10 +552,6 @@ dokanySupportEnd.description=Volume berjenis Dokany sudah tidak didukung oleh Cr
dokanySupportEnd.preferencesBtn=Buka Preferensi
#Retry If Readonly
retryIfReadonly.title=Akses Brankas Dibatasi
retryIfReadonly.message=Tidak ada akses tulis ke direktori brankas
retryIfReadonly.description=Cryptomator tidak bisa menulis ke direktori brankas. Anda dapat mengubah brankas menjadi hanya-baca dan mencoba lagi. Opsi ini bisa dimatikan dalam opsi brankas.
retryIfReadonly.retry=Ubah dan Coba Lagi
# Share Vault
shareVault.title=Bagikan Vault
@@ -576,11 +571,4 @@ shareVault.hub.message=Cara berbagi Hub vault
shareVault.hub.description=Untuk berbagi isi vault dengan anggota tim lain, Anda harus melakukan dua langkah:
shareVault.hub.instruction.1=1. Bagikan akses folder vault terenkripsi melalui penyimpanan cloud.
shareVault.hub.instruction.2=2. Berikan akses ke anggota tim di Cryptomator Hub.
shareVault.hub.openHub=Buka Cryptomator Hub
# Decrypt File Names
# Event View
eventView.filter.allVaults=Semua
## event list entries
shareVault.hub.openHub=Buka Cryptomator Hub

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Ignora
## Button
generic.button.apply=Applica
generic.button.back=Indietro
@@ -283,7 +282,7 @@ preferences.title=Preferenze
## General
preferences.general=Generale
preferences.general.startHidden=Nascondi la finestra avviando Cryptomator
preferences.general.autoCloseVaults=Alla chiusura dell'applicazione blocca le casseforti senza chiedere conferma
preferences.general.autoCloseVaults=Blocca automaticamente le cassaforti aperte all'uscita dell'applicazione
preferences.general.debugLogging=Abilita la registrazione di debug
preferences.general.debugDirectory=Rivela i file di registro
preferences.general.autoStart=Avvia Cryptomator all'avvio del sistema
@@ -395,7 +394,6 @@ main.vaultlist.contextMenu.vaultoptions=Mostra le Opzioni della Cassaforte
main.vaultlist.contextMenu.reveal=Rivela Unità
main.vaultlist.addVaultBtn.menuItemNew=Crea una nuova cassaforte...
main.vaultlist.addVaultBtn.menuItemExisting=Apri una cassaforte esistente...
main.vaultlist.showEventsButton.tooltip=Apri vista eventi
##Notificaition
main.notification.updateAvailable=Aggiornamento disponibile.
main.notification.support=Supporta Cryptomator.
@@ -424,9 +422,7 @@ main.vaultDetail.stats=Statistiche della Cassaforte
main.vaultDetail.locateEncryptedFileBtn=Individua File Crittografato
main.vaultDetail.locateEncryptedFileBtn.tooltip=Scegli un file dalla cassaforte per individuare la controparte cifrata
main.vaultDetail.encryptedPathsCopied=Percorsi copiati negli Appunti!
main.vaultDetail.locateEncrypted.filePickerTitle=Seleziona file nella cassaforte
main.vaultDetail.decryptName.buttonLabel=Decifra nome file
main.vaultDetail.decryptName.tooltip=Seleziona il file di una cassaforte cifrata per decifrarne il nome
main.vaultDetail.filePickerTitle=Seleziona File Nella Cassaforte
### Missing
main.vaultDetail.missing.info=Cryptomator non è riuscito a trovare una cassaforte in questo percorso.
main.vaultDetail.missing.recheck=Ricontrolla
@@ -580,43 +576,4 @@ shareVault.hub.message=Come condividere una cassaforte Hub
shareVault.hub.description=Per condividere il contenuto della cassaforte con un altro membro del gruppo, è necessario eseguire due passaggi:
shareVault.hub.instruction.1=1. Condividi l'accesso alla cartella della cassaforte crittografata tramite l'archiviazione cloud.
shareVault.hub.instruction.2=2. Concedi l'accesso ai membri del gruppo nell'Hub Cryptomator.
shareVault.hub.openHub=Apri l'Hub Cryptomator
# Decrypt File Names
decryptNames.title=Decifra i nomi dei files
decryptNames.filePicker.title=Seleziona file criptato
decryptNames.filePicker.extensionDescription=File crittografato Cryptomator
decryptNames.copyTable.tooltip=Copia tabella
decryptNames.clearTable.tooltip=Cancella la tabella
decryptNames.copyHint=Copia il contenuto della cella con %s
decryptNames.dropZone.message=Trascina i file o fai clic per selezionare
decryptNames.dropZone.error.vaultInternalFiles=Hai selezionato file di casseforti con il nome non decifrabile
decryptNames.dropZone.error.foreignFiles=I file non appartengono alla cassaforte "%s"
decryptNames.dropZone.error.noDirIdBackup=La directory dei file selezionati non contiene il file dirId.c9r
decryptNames.dropZone.error.generic=Decifratura nomi file non riuscita
# Event View
eventView.title=Eventi
eventView.filter.allVaults=Tutti
eventView.clearListButton.tooltip=Cancella elenco
## event list entries
eventView.entry.vaultLocked.description=Sblocca "%s" per i dettagli
eventView.entry.conflictResolved.message=Conflitto risolto
eventView.entry.conflictResolved.showDecrypted=Mostra file decifrato
eventView.entry.conflictResolved.copyDecrypted=Copia percorso decriptato
eventView.entry.conflict.message=Risoluzione dei conflitti fallita
eventView.entry.conflict.showDecrypted=Mostra il file originale decifrato
eventView.entry.conflict.copyDecrypted=Copia il percorso originale decifrato
eventView.entry.conflict.showEncrypted=Mostra file cifrato in conflitto
eventView.entry.conflict.copyEncrypted=Copia il percorso cifrato in conflitto
eventView.entry.decryptionFailed.message=Decifratura fallita
eventView.entry.decryptionFailed.showEncrypted=Mostra file cifrato
eventView.entry.decryptionFailed.copyEncrypted=Copia percorso cifrato
eventView.entry.brokenDirFile.message=Collegamento directory errato
eventView.entry.brokenDirFile.showEncrypted=Visualizza il link cifrato errato
eventView.entry.brokenDirFile.copyEncrypted=Copia il percorso errato del file cifrato
eventView.entry.brokenFileNode.message=Nodo file errato
eventView.entry.brokenFileNode.showEncrypted=Visualizza il nodo file cifrato errato
eventView.entry.brokenFileNode.copyEncrypted=Copia il percorso errato del nodo file cifrato
eventView.entry.brokenFileNode.copyDecrypted=Copia il percorso decifrato
shareVault.hub.openHub=Apri l'Hub Cryptomator

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=閉じる
## Button
generic.button.apply=適用
generic.button.back=戻る
@@ -177,7 +176,6 @@ 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=続行するには以下のサイトで必要な手順を完了してください
@@ -283,7 +281,7 @@ preferences.title=環境設定
## General
preferences.general=基本設定
preferences.general.startHidden=Cryptomator を開始したときウィンドウを隠す
preferences.general.autoCloseVaults=アプリケーション終了時に質問せずに金庫をロックする
preferences.general.autoCloseVaults=アプリケーション終了するときに自動的に開いている金庫を施錠する
preferences.general.debugLogging=ログを有効にする
preferences.general.debugDirectory=ログ ファイルを表示
preferences.general.autoStart=システム開始時に Cryptomator を起動する
@@ -335,12 +333,8 @@ preferences.contribute.registeredFor=サポート証明書 (%s) が登録され
preferences.contribute.noCertificate=Cryptomator を支援し、サポーター証明書を受け取りましょう。ライセンスキーに似ていますがフリーソフトを使う寄付者向けのキーです。 ;-)
preferences.contribute.getCertificate=まだ証明書を手に入れていませんか? 詳細はこちらから確認できます。
preferences.contribute.promptText=サポーター証明書をここに張り付けてください
preferences.contribute.donate=寄付する
preferences.contribute.sponsor=スポンサー
### Remove License Key Dialog
removeCert.title=証明書を削除
removeCert.message=サポーター証明書を削除しますか?
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
@@ -390,11 +384,7 @@ main.vaultlist.contextMenu.unlock=解錠...
main.vaultlist.contextMenu.unlockNow=今すぐ解錠
main.vaultlist.contextMenu.vaultoptions=金庫のオプションを表示
main.vaultlist.contextMenu.reveal=ドライブを表示
main.vaultlist.addVaultBtn.menuItemNew=新しい金庫を作成…
main.vaultlist.addVaultBtn.menuItemExisting=既存の金庫を開く…
##Notificaition
main.notification.updateAvailable=アップデートがあります。
main.notification.support=Cryptomator を支援する。
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=ファイルを保護するために Cryptomator を選んでいただきありがとうございます。ヘルプが必要であれば、スタートガイドをご覧ください:
@@ -420,9 +410,7 @@ main.vaultDetail.stats=金庫の統計情報
main.vaultDetail.locateEncryptedFileBtn=暗号化されたファイルの場所
main.vaultDetail.locateEncryptedFileBtn.tooltip=暗号化された金庫のファイルを選択してください
main.vaultDetail.encryptedPathsCopied=パスをクリップボードにコピーしました!
main.vaultDetail.locateEncrypted.filePickerTitle=金庫内のファイルを選択
main.vaultDetail.decryptName.buttonLabel=ファイル名の復号化
main.vaultDetail.decryptName.tooltip=名前を復号化する暗号化金庫を選択してください
main.vaultDetail.filePickerTitle=金庫内のファイルを選択
### Missing
main.vaultDetail.missing.info=Cryptomator はこの場所に金庫を見つけることができませんでした。
main.vaultDetail.missing.recheck=再確認
@@ -553,9 +541,6 @@ dokanySupportEnd.description=ボリュームタイプ
dokanySupportEnd.preferencesBtn=環境設定を開く
#Retry If Readonly
retryIfReadonly.title=制限された金庫へのアクセス
retryIfReadonly.message=金庫のディレクトリに書き込み権限がありません
retryIfReadonly.retry=変更して再試行
# Share Vault
shareVault.title=保管庫を共有する
@@ -575,21 +560,4 @@ shareVault.hub.message=ハブ保管庫の共有方法
shareVault.hub.description=データ保管庫のコンテンツを他のチームメンバーと共有するには、2つの手順を実行する必要があります
shareVault.hub.instruction.1=1. クラウドストレージ経由で暗号化された保管庫フォルダへのアクセスを共有します。
shareVault.hub.instruction.2=2. Cryptomator Hubでチームメンバーにアクセスを許可する。
shareVault.hub.openHub=Cryptomator Hubを開く
# Decrypt File Names
decryptNames.title=ファイル名の復号化
decryptNames.filePicker.title=暗号化されたファイルを選択
decryptNames.filePicker.extensionDescription=Cryptomator で暗号化したファイル
decryptNames.copyTable.tooltip=表をコピー
decryptNames.clearTable.tooltip=表をクリア
decryptNames.copyHint=%s でセルの内容をコピー
decryptNames.dropZone.message=ファイルをドロップまたはクリックして選択
decryptNames.dropZone.error.vaultInternalFiles=選択された金庫の内部ファイルに復号化できる名前がありません
decryptNames.dropZone.error.foreignFiles=ファイルは金庫 "%s" に属していません
decryptNames.dropZone.error.noDirIdBackup=選択したファイルのディレクトリにdirId.c9rファイルが含まれていません
decryptNames.dropZone.error.generic=ファイル名の復号化に失敗しました
# Event View
## event list entries
shareVault.hub.openHub=Cryptomator Hubを開く

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=무시
## Button
generic.button.apply=적용
generic.button.back=이전
@@ -34,10 +33,10 @@ defaults.vault.vaultName=Vault
# Tray Menu
traymenu.showMainWindow=보기
traymenu.showPreferencesWindow=환경설정
traymenu.lockAllVaults=두 잠그기
traymenu.lockAllVaults=든 Vault 잠금
traymenu.quitApplication=종료
traymenu.vault.unlock=잠금 해제
traymenu.vault.lock=그기
traymenu.vault.unlock=잠금해제
traymenu.vault.lock=
traymenu.vault.reveal=표시
# Add Vault Wizard
@@ -110,7 +109,7 @@ removeVault.description=이 행위는 Cryptomator에서만 이 Vault를 지웁
# Change Password
changepassword.title=비밀번호 변경
changepassword.enterOldPassword="%s"의 비밀번호를 입력하여 주십시.
changepassword.enterOldPassword="%s"의 비밀번호를 입력하여 주십시.
changepassword.finalConfirmation=비밀번호를 잊어버리면, 데이터에 접근할 수 없다는 것을 이해했습니다.
# Forget Password
@@ -136,7 +135,7 @@ unlock.success.rememberChoice=선택 기억하기, 다시 묻지 않음
unlock.success.revealBtn=드라이브 표시
## Failure
unlock.error.customPath.message=Vault를 사용자 정의 경로에 마운트할 수 없습니다.
unlock.error.customPath.description.notSupported=사용자 지정 경로를 계속 사용하려면 설정으로 이동하여 이를 지원하는 볼륨 유형을 선택하십시오. 또는, Vault 설정으로 이동하여 지원되는 마운트 지점을 선택하십시오.
unlock.error.customPath.description.notSupported=사용자 지정 경로를 계속 사용하려면 설정으로 이동하여 이를 지원하는 볼륨 유형을 선택하십시오. 그렇지 않으면 볼트 옵션으로 이동하여 지원되는 마운트 지점을 선택하십시오.
unlock.error.customPath.description.notExists=사용자 정의 마운트 경로가 존재하지 않습니다. 로컬 파일 시스템에서 생성하거나 볼트 옵션에서 변경하세요.
unlock.error.customPath.description.inUse=드라이브 문자 또는 사용자 정의 마운트 경로 "%s"가 이미 사용 중입니다.
unlock.error.customPath.description.hideawayNotDir=잠금 해제에 사용된 임시 숨김 파일 "%3$s"을 제거할 수 없습니다. 파일을 확인한 후 수동으로 삭제해 주세요.
@@ -195,7 +194,7 @@ lock.forced.retryBtn=재시도
lock.forced.forceBtn=강제 잠금
## Failure
lock.fail.message=Vault 잠금에 실패하였습니다.
lock.fail.description="%s" Vault를 잠글 수 없습니다. 저장되지 않은 작업이 다른 곳에 저장된 것과 중요한 읽기/쓰기 동작이 완료되었는지 확인 하십시요. Vault를 닫기 위해, Cryptomator 프로세스를 강제로 종료 하십시.
lock.fail.description="%s" Vault를 잠글 수 없습니다. 저장되지 않은 작업이 다른 곳에 저장된 것과 중요한 읽기/쓰기 동작이 완료되었는지 확인 하십시요. Vault를 닫기 위해, Cryptomator 프로세스를 강제로 종료 하십시.
# Migration
migration.title=Vault 업그레이드
@@ -208,7 +207,7 @@ migration.start.remarkCanRun=이 vault를 열 때 사용하는 모든 장치가
migration.start.remarkSynced=업그레이드하기 전에 해당 vault가 모든 기기에 정상적으로 동기화되어야 합니다.
migration.start.confirm=나는 위 정보를 읽고 정말 이해했습니다.
## Run
migration.run.enterPassword="%s"의 비밀번호를 입력하십시.
migration.run.enterPassword="%s"의 비밀번호를 입력하십시.
migration.run.startMigrationBtn=Vault 마이그레이션
migration.run.progressHint=이 작업은 시간이 조금 소요됩니다.
## Success
@@ -224,7 +223,7 @@ migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=파일 시스
## Impossible
migration.impossible.heading=Vault를 마이그레이션 할 수 없습니다.
migration.impossible.reason=저장소 위치 또는 접근 지점이 호환되지 않아 Vault를 자동으로 마이그레이션 할 수 없습니다.
migration.impossible.moreInfo=Vault를 이전 버전으로 계속 열수 있습니다. Vault를 직접 마이그레이션 하는 설명을 보시려면, 다음을 방문하십시.
migration.impossible.moreInfo=Vault를 이전 버전으로 계속 열수 있습니다. Vault를 직접 마이그레이션 하는 설명을 보시려면, 다음을 방문하십시.
# Health Check
## Start
@@ -276,14 +275,14 @@ health.result.fixStateFilter.fixFailed=문제 해결 실패
## Fix Application
health.fix.fixBtn=문제 해결
health.fix.successTip=문제 해결이 성공적으로 완료되었습니다
health.fix.failTip=문제 해결 실패, 상세 정보는 로그를 참조하십시.
health.fix.failTip=문제 해결 실패, 상세 정보는 로그를 참조하십시.
# Preferences
preferences.title=환경설정
## General
preferences.general=일반
preferences.general.startHidden=Cryptomator를 시작할 때 창 숨김
preferences.general.autoCloseVaults=응용 프로그램을 종료할 때 묻지 않고 Vault를 잠그기
preferences.general.autoCloseVaults=애플리케이션을 닫을 때 자동으로 열린 Vault를 잠그기.
preferences.general.debugLogging=디버그 로깅 활성화
preferences.general.debugDirectory=로그 파일 표시
preferences.general.autoStart=시스템 시작 시 Cryptomator 실행
@@ -333,7 +332,7 @@ preferences.updates.upToDate=현재 최신 버전의 Cryptomator를 사용하고
## Contribution
preferences.contribute=후원하기
preferences.contribute.registeredFor=%s(으)로 후원자 인증 등록됨
preferences.contribute.noCertificate=Cryptomator를 후원하시고 후원자 인증을 받으십시. 라이선스 키와 비슷하지만 무료 소프트웨어를 사용하는 멋진 사람들을 위한 것입니다. ;-)
preferences.contribute.noCertificate=Cryptomator를 후원하시고 후원자 인증을 받으십시. 라이선스 키와 비슷하지만 무료 소프트웨어를 사용하는 멋진 사람들을 위한 것입니다. ;-)
preferences.contribute.getCertificate=아직 후원자 인증이 없으신가요? 어떻게 얻는지 배울 수 있습니다.
preferences.contribute.promptText=후원자 인증코드를 여기에 붙여넣기
preferences.contribute.thankYou=Cryptomator의 오픈 소스 개발을 지원해 주셔서 감사합니다!
@@ -395,7 +394,6 @@ main.vaultlist.contextMenu.vaultoptions=Vault 옵션 보기
main.vaultlist.contextMenu.reveal=드라이브 표시
main.vaultlist.addVaultBtn.menuItemNew=새 Vault 생성...
main.vaultlist.addVaultBtn.menuItemExisting=기존 Vault 열기...
main.vaultlist.showEventsButton.tooltip=이벤트 뷰어 열기
##Notificaition
main.notification.updateAvailable=업데이트가 있습니다.
main.notification.support=Cryptomator 지원하기.
@@ -424,6 +422,7 @@ main.vaultDetail.stats=Vault 통계
main.vaultDetail.locateEncryptedFileBtn=암호화된 파일 위치
main.vaultDetail.locateEncryptedFileBtn.tooltip=암호화된 파일을 보기 위해 Vault에서 파일을 선택하십시오.
main.vaultDetail.encryptedPathsCopied=클립보드에 복사됨!
main.vaultDetail.filePickerTitle=Vault 내부에서 파일 선택
### Missing
main.vaultDetail.missing.info=Cryptomator가 이 경로에 있는 Vault를 찾지 못했습니다.
main.vaultDetail.missing.recheck=다시 시도
@@ -498,7 +497,7 @@ recoveryKey.display.StorageHints=매우 안전한곳에 보관하십시오. 예
## Reset Password
### Enter Recovery Key
recoveryKey.recover.title=비밀번호 바꾸기
recoveryKey.recover.prompt="%s"의 복구키를 입력하십시:
recoveryKey.recover.prompt="%s"의 복구키를 입력하십시:
recoveryKey.recover.correctKey=올바른 복구 키 입니다
recoveryKey.recover.wrongKey=이 복구 키는 다른 vault의 키입니다
recoveryKey.recover.invalidKey=해당 복구 키는 유효하지 않습니다
@@ -577,31 +576,4 @@ shareVault.hub.message=Hub Vault를 공유하는법
shareVault.hub.description=다른 팀 구성원과 Vault를 공유하기 위해서는 다음 단계를 따르십시오:
shareVault.hub.instruction.1=1. 암호화된 Vault 폴더를 클라우드 스토리지를 통해 공유하십시오.
shareVault.hub.instruction.2=2. Cryptomator Hub에서 팀 구성원에 접근을 허가하기
shareVault.hub.openHub=Cryptomator Hub 열기
# Decrypt File Names
# Event View
eventView.title=이벤트
eventView.filter.allVaults=전체
## event list entries
eventView.entry.vaultLocked.description="%s"를 잠금 해제하여 세부정보 보기
eventView.entry.conflictResolved.message=해결된 충돌
eventView.entry.conflictResolved.showDecrypted=복호화된 파일 보기
eventView.entry.conflictResolved.copyDecrypted=복호화된 경로 복사하기
eventView.entry.conflict.message=충돌 해결 실패
eventView.entry.conflict.showDecrypted=복호화된 원본 파일 보기
eventView.entry.conflict.copyDecrypted=복호화된 원본 경로 복사하기
eventView.entry.conflict.showEncrypted=충돌하는 암호화된 파일 보기
eventView.entry.conflict.copyEncrypted=충돌하는 암호화된 경로 복사하기
eventView.entry.decryptionFailed.message=복호화 실패
eventView.entry.decryptionFailed.showEncrypted=암호화된 파일 보기
eventView.entry.decryptionFailed.copyEncrypted=암호화된 경로 복사하기
eventView.entry.brokenDirFile.message=망가진 디렉터리 링크
eventView.entry.brokenDirFile.showEncrypted=망가진 암호화된 링크 보기
eventView.entry.brokenDirFile.copyEncrypted=망가진 링크의 경로 복사하리
eventView.entry.brokenFileNode.message=망가진 파일시스템 노드
eventView.entry.brokenFileNode.showEncrypted=망가진 암호화된 노드 보기
eventView.entry.brokenFileNode.copyEncrypted=망가진 암호화된 노드의 경로 복사하기
eventView.entry.brokenFileNode.copyDecrypted=복호화된 경로 복사하기
shareVault.hub.openHub=Cryptomator Hub 열기

View File

@@ -1,32 +1,26 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Atmest
## Button
generic.button.apply=Pielietot
generic.button.back=Atpakaļ
generic.button.cancel=Atcelt
generic.button.change=Mainīt
generic.button.choose=Izvēlēties
generic.button.choose=Izvēlies...
generic.button.close=Aizvērt
generic.button.copy=Ievietot starpliktuvē
generic.button.copied=Ievietots starpliktuvē
generic.button.copy=Kopēt
generic.button.copied=Nokopēts!
generic.button.done=Darīts
generic.button.next=Tālāk
generic.button.print=Drukāt
generic.button.remove=Noņemt
# Error
error.message=Atgadījās kļūda
error.description=Cryptomator negaidīja, ka tas notiks. Var uzmeklēt esošus šīs kļūdas risinājumus. Vai arī, ja par to vēl nav ziņots, var droši darīt to.
error.hyperlink.lookup=Uzmeklēt šo kļūdu
error.hyperlink.report=Ziņot par šo kļūdu
error.message=Radās kļūda
error.description=Cryptomator negaidīja, ka tas notiks. Varat meklēt esošos šīs kļūdas risinājumus. Vai arī, ja par to vēl nav ziņots, droši dariet to.
error.hyperlink.lookup=Meklējiet šo kļūdu
error.hyperlink.report=Ziņojiet par šo kļūdu
error.technicalDetails=Detaļas:
error.existingSolutionDescription=Cryptomator negaidīja, ka tas notiks. Bet mēs šai kļūdai atradām esošu risinājumu. Lūgums apskatīt zemāk esošo saiti.
error.hyperlink.solution=Uzmeklēt risinājumu
error.lookupPermissionMessage=Cryptomator var tiešsaistē uzmeklēt šī sarežģījuma risinājumu. No pašreizējās IP adreses tiks nosūtīts pieprasījums uz mūsu sarežģījumu datubāzi.
error.dismiss=Atmest
error.lookUpSolution=Uzmeklēt risinājumu
error.existingSolutionDescription=Cryptomator negaidīja, ka tas notiks. Bet mēs atradām esošu risinājumu šai kļūdai. Lūdzu, apskatiet tālāk norādīto saiti.
# Defaults
defaults.vault.vaultName=Glabātava
@@ -34,497 +28,243 @@ defaults.vault.vaultName=Glabātava
# Tray Menu
traymenu.showMainWindow=Rādīt
traymenu.showPreferencesWindow=Iestatījumi
traymenu.lockAllVaults=Aizslēgt visas
traymenu.lockAllVaults=Aizslēgt visu
traymenu.quitApplication=Iziet
traymenu.vault.unlock=Atslēgt
traymenu.vault.lock=Aizslēgt
traymenu.vault.reveal=Atklāt
# Add Vault Wizard
addvaultwizard.title=Pievienot glabātavu
addvaultwizard.title=Pievienot glabātuvi
## New
addvaultwizard.new.title=Pievienot jaunu glabātavu
### Name
addvaultwizard.new.nameInstruction=Jāizvēlas glabātavas nosaukums
addvaultwizard.new.namePrompt=Glabātavas nosaukums
addvaultwizard.new.nameInstruction=Izvēlies glabātuves nosaukumu
addvaultwizard.new.namePrompt=Glabātuves nosaukums
### Location
addvaultwizard.new.locationInstruction=Kur Cryptomator vajadzētu saglabāt glabātavs šifrētās datnes?
addvaultwizard.new.locationLoading=Pārbauda noklusējuma mākoņkrātuvju mapes vietējā datņu sistēmā…
addvaultwizard.new.locationInstruction=Kur Cryptomator vajadzētu glabāt jūsu glabātuves šifrētos failus?
addvaultwizard.new.locationLabel=Krātuves atrašanās vieta
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Pielāgota atrašanās vieta
addvaultwizard.new.directoryPickerButton=Izvēlēties
addvaultwizard.new.directoryPickerTitle=Atlasīt mapi
addvaultwizard.new.fileAlreadyExists=Jau pastāv datne vai mape ar glabātavas nosaukumu
addvaultwizard.new.locationDoesNotExist=Mape norādītajā ceļā nepastāv vai tai nevar piekļūt
addvaultwizard.new.locationIsNotWritable=Norādītajā ceļā nav rakstīšanas piekļuves
addvaultwizard.new.locationIsOk=Glabātavai piemērota atrašanās vieta
addvaultwizard.new.invalidName=Nederīgs glabātavas nosaukums
addvaultwizard.new.validName=Derīgs glabātavas nosaukums
addvaultwizard.new.validCharacters.message=Glabātavas nosaukums var saturēt šādas rakstzīmes:
addvaultwizard.new.directoryPickerButton=Izvēlies...
addvaultwizard.new.directoryPickerTitle=Izvēlēties mapi
addvaultwizard.new.invalidName=Nederīgs krātuves nosaukums
addvaultwizard.new.validName=Derīgs krātuves nosaukums
addvaultwizard.new.validCharacters.message=Krātuves nosaukums var saturēt šādas rakstzīmes:
addvaultwizard.new.validCharacters.chars=Burtus (piemēram: a, ж vai 수)
addvaultwizard.new.validCharacters.numbers=Skaitļus
addvaultwizard.new.validCharacters.dashes=Savienojuma zīme (%s) vai pasvītra (%s)
addvaultwizard.new.validCharacters.dashes=Defise (%s) vai pasvītra (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Iespējot lietpratēju iestatījumus
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Jāievada vērtība starp 36 un 220 (pēc noklusējuma 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Atvērt dokumentāciju, lai uzzinātu vairāk.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Lielākais pieļaujamais šifrēto datņu nosaukumu garums
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Derīgs
### Password
addvaultwizard.new.createVaultBtn=Izveidot glabātavu
addvaultwizard.new.generateRecoveryKeyChoice=Bez paroles nebūs iespējams piekļūt saviem datiem. Vai ir nepieciešama atkopes atslēga gadījumam, ja tiks pazaudēta parole?
addvaultwizard.new.generateRecoveryKeyChoice.yes=Jā, lūdzu, labāk droši nekā pēc tam nožēlot
addvaultwizard.new.createVaultBtn=Izveidot glabātuvi
addvaultwizard.new.generateRecoveryKeyChoice=Jūs nevarēsiet piekļūt saviem datiem bez paroles. Vai vēlaties atkopšanas atslēgu gadījumam, kad esat pazaudējis paroli?
addvaultwizard.new.generateRecoveryKeyChoice.yes=Jā, lūdzu, labāk droši nekā nekā
addvaultwizard.new.generateRecoveryKeyChoice.no=Nē, paldies, es nezaudēšu savu paroli
### Information
addvault.new.readme.storageLocation.fileName=SVARĪGI.rtf
addvault.new.readme.storageLocation.1=⚠️ GLABĀTAVAS DATNES ⚠️
addvault.new.readme.storageLocation.2=Šī ir glabātavas atrašanās vieta.
addvault.new.readme.storageLocation.3=Nekādā gadījumā šajā mapē
addvault.new.readme.storageLocation.4=• neizmainīt jebkādas datnes vai
addvault.new.readme.storageLocation.5=• neielīmēt jebkādas datnes šifrēšanai.
addvault.new.readme.storageLocation.6=Ja ir vēlme šifrēt datnes un apskatīt glabātavas saturu, rīkojas šādi:
addvault.new.readme.storageLocation.7=1. Jāpievieno šī glabātava Cryptomator.
addvault.new.readme.storageLocation.8=2. Jāatslēdz glabātava Cryptomator.
addvault.new.readme.storageLocation.9=3. Jāatver piekļuves vieta ar pogu "Atklāt".
addvault.new.readme.storageLocation.10=Ja ir nepieciešama palīdzība, apmeklē dokumentācija: %s
addvault.new.readme.storageLocation.fileName=IMPORTANT.rtf
addvault.new.readme.storageLocation.1=⚠️ GLABĀTUVES DATNES ⚠️
addvault.new.readme.storageLocation.2=Šī ir jūsu glabātuves atrašanās vieta.
addvault.new.readme.storageLocation.3=Nekādā gadījumā
addvault.new.readme.storageLocation.4=mainīt visas datnes šajā mapē vai
addvault.new.readme.storageLocation.5=ielīmējiet visas datnes šifrēšanai šajā mapē.
addvault.new.readme.storageLocation.6=Ja vēlaties šifrēt datnes un skatīt glabātuves saturu, rīkojieties šādi:
addvault.new.readme.storageLocation.7=Pievienot šo glabātuvi Cryptomator.
addvault.new.readme.storageLocation.8=Atslēgt glabātuvi ar Cryptomator.
addvault.new.readme.storageLocation.9=Atveriet piekļuves vietu, noklikšķinot uz pogas "Atklāt".
addvault.new.readme.storageLocation.10=Ja hums ir nepieciešama palīdzība, apmeklējiet dokumentāciju: %s
addvault.new.readme.accessLocation.fileName=WELCOME.rtf
addvault.new.readme.accessLocation.1=🔐️ ŠIFRĒTS SĒJUMS 🔐️
addvault.new.readme.accessLocation.2=Šī ir glabātavas piekļuves vieta.
addvault.new.readme.accessLocation.3=Cryptomator šifrēs jebkuru šim sējumam pievienoto datni. Ar to var strādāt kā ar jebkuru citu diskzini/mapi. Šis ir tikai atšifrēta satura skats, datnes cietajā diskā visu laiku ir šifrētas.
addvault.new.readme.accessLocation.4=Šo datni var droši noņemt.
addvault.new.readme.accessLocation.2=Šī ir jūsu glabātuves piekļuves vieta.
addvault.new.readme.accessLocation.3=Visas šeit pievienotās datnes tiks šifrētas ar Cryptomator. Jūs variet ar to strādāt kā ar jebkuru citu disku/mapi. Šis it tikai atšifrēts satura skats, jūsu dati diskā visu laiku ir šifrēti.
addvault.new.readme.accessLocation.4=Jūs variet droši noņemt šo datni.
## Existing
addvaultwizard.existing.title=Pievienot esošu glabātavu
addvaultwizard.existing.instruction=Jāizvēlas esošas glabātavas datne "vault.cryptomator". Ja pastāv tikai datne ar nosaukumu "masterkey.cryptomator", tad jāatlasā tā.
addvaultwizard.existing.chooseBtn=Izvēlēties…
addvaultwizard.existing.filePickerTitle=Atlasīt glabātavas datni
addvaultwizard.existing.filePickerMimeDesc=Cryptomator glabātava
addvaultwizard.existing.chooseBtn=Izvēlies...
## Success
addvaultwizard.success.nextStepsInstructions=Pievienota glabātava "%s".\nIr nepieciešams atslēgt šo glabātavu, lai piekļūtu vai pievienotu saturu. To var arī darīt jebkurā brīdi vēlāk.
addvaultwizard.success.nextStepsInstructions=Pievienota "%s" glabātuve.\nlai piekļūtu vai pievienotu datus, jums šo glabātuvi ir jāatslēdz. Vai arī jūs to variet atslēgt vēlāk jebkurā laikā.
addvaultwizard.success.unlockNow=Atslēgt tagad
# Remove Vault
removeVault.title=Noņemt "%s"
removeVault.message=Noņemt glabātavu?
removeVault.description=Šis tikai liks Cryptomator aizmirst šo glabātavu. To var pievienot atkārtoti. Nekādi šifrētie dati no cietā diska netiks izdzēsti.
removeVault.title=Noņemt glabātuvi
removeVault.description=Šis tikai liks Cryptomator aizmirst šo glabātuvi. Jūs to variet pievienot vēlāk atkārtoti. Nekādi šifrētie dati no diska netiks dzēsti.
# Change Password
changepassword.title=Nomainīt paroli
changepassword.enterOldPassword=Jāievada "%s" pašreizējā parole
changepassword.finalConfirmation=Es saprotu, ka es vairs nevarēšu piekļūt saviem datiem, ja aizmirsīšu savu paroli
changepassword.title=Mainīt paroli
changepassword.enterOldPassword=Ievadiet "%s" pašreizējo paroli
changepassword.finalConfirmation=Es saprotu, ka paroles aizmiršanas gadījumā, es vairs nevarēšu piekļūt saviem datiem
# Forget Password
forgetPassword.title=Aizmirst paroli
forgetPassword.message=Aizmirst saglabāto paroli?
forgetPassword.description=Šī darbība izdzēsīs saglabāto glabātavas paroli no sistēmas atslēgu saišķa.
forgetPassword.description=Tas dzēsīs saglabāto glabātuves paroli no jūsu sistēmas atslēgu krātuves.
forgetPassword.confirmBtn=Aizmirst paroli
# Unlock
unlock.title=Atslēgt "%s"
unlock.passwordPrompt=Jāievada "%s" parole:
unlock.savePassword=Atcerēties paroli
unlock.passwordPrompt=Ievadiet "%s" paroli:
unlock.unlockBtn=Atslēgt
## Select
unlock.chooseMasterkey.message=Galvenās atslēgas datne nav atrasta
unlock.chooseMasterkey.description=Cryptomator nevarēja atrast galvenās atslēgas datni glabātavai "%s". Lūgums pašrocīgi izvēlēties atslēgas datni.
unlock.chooseMasterkey.filePickerTitle=Atlasīt galvenās atslēgas datni
unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator galvenā atslēga
unlock.chooseMasterkey.filePickerTitle=Atlasīt galveno atslēgas datni
## Success
unlock.success.message=Atslēgšana sekmīga
unlock.success.description=Glabātavas "%s" saturs tagad ir pieejams tās piemontēšanas vietā.
unlock.success.rememberChoice=Atcerēties manu izvēli, vairs nevaicāt
unlock.success.revealBtn=Atklāt disku
## Failure
unlock.error.customPath.message=Nav iespējams piemontēt glabātavu pielāgotam ceļam
unlock.error.customPath.description.notSupported=Ja ir vēlēšanās turpināt izmantot pielāgoto ceļu, lūgums doties uz iestatījumiem un atlasīt sējuma veidu, kas to nodrošina. Pretējā gadījumā jādodas uz glabātavas iespējam un jāizvēlas atbalstīts piemontēšanas punkts.
unlock.error.customPath.description.notExists=Pielāgotais piemontēšanas ceļš nepastāv. Vai nu tas ir jāizveido vietējā datņu sistēmā, vai arī jānomaina glabātavas iespējās.
unlock.error.customPath.description.inUse=Diska burts vai pielāgotais piemontēšanas ceļš "%s" jau tiek izmantots.
unlock.error.customPath.description.hideawayNotDir=Pagaidu slēpto datni "%3$s", ko izmanto atslēgšanai, nevarēja noņemt. Lūgums pārbaudīt datni un tad to pašrocīgi izdzēst.
unlock.error.customPath.description.couldNotBeCleaned=Glabātavu nevarēja piemontēt ceļā "%s". Lūgums mēģināt vēlreiz vai izvēlēties citu ceļu.
unlock.error.customPath.description.notEmptyDir=Pielāgotais piemontēšanas ceļš "%s" nav tukša mape. Lūgums izvēlēties tukšu mapi un mēģināt vēlreiz.
unlock.error.customPath.description.generic=Šai glabātavai tika atlasīts pielāgots piemontēšanas ceļš, bet tās izmantošana neizdevās un beidzās ar ziņojumu: %2$s
unlock.error.restartRequired.message=Neizdevās atslēgt glabātavu
unlock.error.restartRequired.description=Jāmaina sējuma veids glabātavas iespējās vai Cryptomator atkārtoti jāpalaiž.
unlock.error.title="%s" atslēgšana neizdevās
## Hub
hub.noKeychain.message=Nebija iespējams piekļūt ierīces atslēgai
hub.noKeychain.description=Lai atslēgtu Hub glabātavas, ir nepieciešama ierīces atslēga, kas tiek droši uzglabāta atslēgu saišķī. Lai tuprinātu, iestatījumos jāiespējo "%s" un jāatlasa atslēgu saišķis.
hub.noKeychain.openBtn=Atvērt iestatījumus
### Waiting
hub.auth.message=Gaida autentificēšanu…
hub.auth.description=Vajadzētu notikt automātiskai pārvirzīšanai uz pieteikšanās lapu.
hub.auth.loginLink=Pārvirzīšana nenotika? Jāklikšķina šeit, lai atvērtu.
### Receive Key
hub.receive.message=Apstrādā atbildi…
hub.receive.description=Cryptomator saņem un apstrādā atbildi no Hub. Lūgums uzgaidīt.
### Register Device
hub.register.message=Jauna ierīce
hub.register.description=Šī ir pirmā piekļuve Hub no šīs ierīces. Lūgums to reģistrēt ar savu konta atslēgu.
hub.register.nameLabel=Ierīces nosaukums
hub.register.invalidAccountKeyLabel=Nederīga konta atslēga
hub.register.registerBtn=Reģistrēties
### Register Device Legacy
hub.register.legacy.occupiedMsg=Nosaukums jau tiek izmantots
hub.register.legacy.description=Šī ir pirmā piekļuve Hub no šīs ierīces. Lūgums to reģistrēt.
### Registration Success
hub.registerSuccess.message=Ierīce reģistrēta
hub.registerSuccess.description=Ierīce tika sekmīgi reģistrēta. Tagad var turpināt ar glabātavas atslēgšanu.
hub.registerSuccess.unlockBtn=Atslēgt
hub.registerSuccess.legacy.description=Lai piekļūtu glabātavai, tās īpašniekam ir papildus jāpilnvaro ierīce.
### Registration Failed
hub.registerFailed.message=Ierīces reģistrācija neizdevās
hub.registerFailed.description.generic=Reģistrēšanās laikā atgadījās kļūda. Vairāk informācijas ir atrodama lietotnes žurnālā.
hub.registerFailed.description.deviceAlreadyExists=Šī ierīce jau ir reģistrēta citam lietotājam. Jamēģina nomainīt lietotāja kontu vai izmantot citu ierīci.
### Unauthorized
hub.unauthorized.message=Piekļuve atteikta
hub.unauthorized.description=Nav pilnvaras atvērt šo glabātavu. Jāsazinās ar glabātavas īpašnieku, lai pieprasītu piekļuvi.
### Requires Account Initialization
hub.requireAccountInit.message=Nepieciešama darbība
hub.requireAccountInit.description.0=Lai turpinātu, lūgums pabeigt nepieciešamos soļus savā
hub.requireAccountInit.description.1=Hub lietotāja profilā
hub.requireAccountInit.description.2=.
### License Exceeded
hub.invalidLicense.message=Nederīga Hub licence
hub.invalidLicense.description=Cryptomator Hub instancei ir nederīga licence. Lūgums ziņot Hub pārvaldītājam, lai uzlabo vai atjauno licenci.
# Lock
## Force
lock.forced.message=Aizslēgšana neizdevās
lock.forced.description="%s" aizslēgšana tika aizturēta nepabeigtu darbību vai atvērtu datņu dēļ. Var veikt šīs glabātavas piespiedu aizslēgšanu, tomēr datņu sistēmas darbību pārtraukšana var beigties ar nesaglabāttiem vai zaudētiem datiem.
lock.forced.retryBtn=Mēģināt vēlreiz
lock.forced.forceBtn=Piespiedu aizslēgšana
## Failure
lock.fail.message=Glabātavas aizslēgšana neizdevās
lock.fail.description=Glabātavu "%s" nevarēja aizslēgt. Jānodrošina, ka nesaglabātais darbs ir saglabāts kaut kur citur un svarīgas lasīšanas/rakstīšanas darbības ir pabeigtas. Lai varētu aizvērt glabātavu, jānobeidz Cryptomator process.
# Migration
migration.title=Jaunināt glabātavu
migration.title=Jaunināt glabātuvi
## Start
migration.start.header=Jaunināt glabātavu
migration.start.text=Lai atvērtu savu glabātavu "%s" šajā jaunajā Cryptomator versijā, to ir nepieciešams jaunināt uz jaunāku veidolu. Pirms to darīt, ir jāzina šis:
migration.start.remarkUndone=Šo jauninājumu nevar atsaukt.
migration.start.remarkVersions=Vecākās Cryptomator versijās nevarēs atvērt jaunināto glabātavu.
migration.start.remarkCanRun=Jāpārliecinās, ka katrā ierīcē, kurā piekļūst glabātavai, var darboties šī Cryptomator versija.
migration.start.remarkSynced=Jāpārliecinās, ka glabātava šajā un citās ierīcēs ir pilnībā sinhronizēta, pirms to jaunina.
migration.start.confirm=Izlasīju un sapratu augstāk esošo informāciju
migration.start.header=Jaunināt glabātuvi
## Run
migration.run.enterPassword=Jāievada "%s" parole
migration.run.startMigrationBtn=Pārcelt glabātavu
migration.run.progressHint=Tas varētu aizņemt kādu laiku…
migration.run.enterPassword=Ievadiet "%s" paroli
migration.run.startMigrationBtn=Migrēt glabātuvi
## Success
migration.success.nextStepsInstructions="%s" sekmīgi pārcelta.\nTagad var atslēgt savu glabātavu.
migration.success.nextStepsInstructions="%s" sekmīgi migrēta.\nJūs tagad variet atslēgt jūsu glabātuvi.
migration.success.unlockNow=Atslēgt tagad
## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=Neatbalstīta datņu sistēma
migration.error.missingFileSystemCapabilities.description=Pārcelšana netika uzsākta, jo glabātava atrodas neatbilstošā datņu sistēmā.
migration.error.missingFileSystemCapabilities.description=Migrācija netika uzsāta, jo jūsu glabātuve atrodās neadekvātā datņu sistēmā.
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=Datņu sistēma neatbalsta garus datņu nosaukumus.
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=Datņu sistēma neatbalsta garus ceļu nosaukumus.
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Datņu sistēma nav lasāma.
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Datņu sistēma nav rakstāma.
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Nav atļaujas lasīt no datņu sistēmas.
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Nav atļaujas rakstīt datņu sistēmā.
## Impossible
migration.impossible.heading=Nebija iespējams pārcelt glabātavu
migration.impossible.reason=Glabātavu nevar automātiski pārcelt, jo tās glabāšanas vieta vai piekļuves punkts nav saderīgs.
migration.impossible.moreInfo=Glabātavu joprojām var atvērt ar vecāku versiju. Lai iegūdu norādes par to, kā pašrocīgi pārcelt glabātavu, jāapmeklē
# Health Check
## Start
health.title="%s" veseluma pārbaude
health.intro.header=Veseluma pārbaude
health.intro.text=Veseluma pārbaude ir pārbaužu kopums, lai noteiktu un iespējami atrisinātu nebūšanas glabātavas iekšējā uzbūvē. Lūgums paturēt prātā:
health.intro.remarkSync=Jānodrošina, ka visas ierīces ir pilnībā sinhronizētas, tas atrisina vairumu sarežģījumu.
health.intro.remarkFix=Ne visus sarežģījumus var atrisināt.
health.intro.remarkBackup=Ja dati ir bojāti, līdzēt var tikai rezerves kopija.
health.intro.affirmation=Es izlasīju un sapratu augstāk esošo informāciju
## Start Failure
health.fail.header=Kļūda glabātavas konfigurācijas ielādēšanā
health.fail.ioError=Atgadījās kļūda konfigurācijas datnes piekļūšanas un lasīšanas laikā.
health.fail.parseError=Glabātavas konfigurācijas apstrādes laikā atgadījās kļūda.
health.fail.moreInfo=Vairāk informācijas
## Check Selection
health.checkList.description=Jāatlasa pārbaudes kreisajā pusē esošajā sarakstā vai jāizmanto zemāk esošās pogas.
health.checkList.selectAllButton=Atlasīt visas pārbaudes
health.checkList.deselectAllButton=Atcelt visu pārbaužu atlasīšanu
health.check.runBatchBtn=Izpildīt atlasītās pārbaudes
## Detail view
health.check.detail.noSelectedCheck=Jāatlasa pabeigta veselības pārbaude kreisajā pusē esošajā sarakstā, lai apskatītu iznākumu.
health.check.detail.checkScheduled=Pārbaude ir ieplānota.
health.check.detail.checkRunning=Pārbaude pašlaik izpildās…
health.check.detail.checkSkipped=Pārbaude netika atlasīta izpildīšanai.
health.check.detail.checkFinished=Pārbaude beidzās sekmīgi.
health.check.detail.checkFinishedAndFound=Pārbaude beidza izpildīteis. Lūgums pārskatīt iznākumu.
health.check.detail.checkFailed=Pārbaude beidza darboties kļūdas dēļ.
health.check.detail.checkCancelled=Pārbaude tika atcelta.
health.check.detail.listFilters.label=Atlasīt
health.check.detail.fixAllSpecificBtn=Salabot visu ar veidu
health.check.exportBtn=Izgūt pārskatu
## Result view
health.result.severityFilter.all=Nozīmīgums - Visi
health.result.severityFilter.good=Labi
health.result.severityFilter.info=Uzziņa
health.result.severityFilter.warn=Brīdinājums
health.result.severityFilter.crit=Kritiski
health.result.severityTip.good=Nozīmīgums: labi\nGlabātavas uzbūve ir kārtībā.
health.result.severityTip.info=Nozīmīgums: uzziņa\nGlabātavas uzbūve ir neskarta; ieteicama labošana.
health.result.severityTip.warn=Nozīmīgums: brīdinājums\nGlabātavas uzbūve ir bojāta; labošana ir ļoti ieteicama.
health.result.severityTip.crit=Nozīmīgums: kritiski\nGlabātavas uzbūve ir bojāta, noteikti datu zaudējumi.
health.result.fixStateFilter.all=Labošanas stāvoklis - Viss
health.result.fixStateFilter.fixable=Labojams
health.result.fixStateFilter.notFixable=Nav salabojams
health.result.fixStateFilter.fixing=Labo…
health.result.fixStateFilter.fixed=Salabots
health.result.fixStateFilter.fixFailed=Labošana neizdevās
## Fix Application
health.fix.fixBtn=Salabot
health.fix.successTip=Labojums sekmīgs
health.fix.failTip=Salabošana neizdevās. Jāskatās žurnālā, lai iegūtu vairāk informācijas
# Preferences
preferences.title=Iestatījumi
## General
preferences.general=Vispārēji
preferences.general.startHidden=Paslēpt logu Cryptomator palaišanas laikā
preferences.general.autoCloseVaults=Aizslēgt glabātavas bez vaicāšanas, kad iziet no lietotnes
preferences.general.startHidden=Paslēpt logu, kad startē Cryptomator
preferences.general.debugLogging=Iespējot atkļūdošanas žurnalēšanu
preferences.general.debugDirectory=Atklāt žurnāla datnes
preferences.general.autoStart=Palaist Cryptomator pēc sistēmas uzsākšanās
preferences.general.keychainBackend=Glabāt paroles ar
preferences.general.quickAccessService=Pievienot atslēgtās glabātavas ātrās piekļuves apgabalam
preferences.general.autoStart=Palaist Cryptomator pie sistēmas startēšanas
## Interface
preferences.interface=Saskarne
preferences.interface.theme=Izskats un izjūta
preferences.interface.theme.automatic=Automātisks
preferences.interface.theme.dark=Tumšs
preferences.interface.theme.light=Gaišs
preferences.interface.unlockThemes=Atslēgt tumšo izskatu
preferences.interface.language=Valoda (nepieciešama atkārtota palaišana)
preferences.interface.language.auto=Sistēmas noklusējums
preferences.interface.interfaceOrientation=Saskarnes novietojums
preferences.interface.interfaceOrientation.ltr=No kreisās uz labo
preferences.interface.interfaceOrientation.rtl=No labās uz kreiso
preferences.interface.showTrayIcon=Rādīt teknes ikonu (nepieciešama atkārtota palaišana)
preferences.interface.compactMode=Iespējot blīvu glabātavu sarakstu
## Volume
preferences.volume=Virtuālais disks
preferences.volume.type=Noklusējuma sējuma veids
preferences.volume.type.automatic=Automātisks
preferences.volume.docsTooltip=Jāatver dokumentācija, lai uzzinātu vairāk par dažādiem sējumu veidiem.
preferences.volume.fuseRestartRequired=Lai pielietotu izmaiņas, Cryptomator ir nepieciešams palaist atkārtoti.
preferences.volume.tcp.port=Noklusējuma TCP ports
preferences.volume.supportedFeatures=Izvēlētais sējuma veids nodrošina šādas iespējas:
preferences.volume.feature.mountAuto=Automātisku piemontēšanas vietas atlasīšanu
preferences.volume.feature.mountToDir=Pielāgotu mapi kā piemontēšanas vietu
preferences.volume.feature.mountToDriveLetter=Diska burts kā piemontēšanas vieta
preferences.volume.feature.mountFlags=Pielāgotas piemontēšanas iespējas
preferences.volume.feature.readOnly=Tikai lasāma piemontēšana
preferences.volume=Virtuāls disks
## Updates
preferences.updates=Atjauninājumi
preferences.updates.currentVersion=Pašreizējā versija: %s
preferences.updates.autoUpdateCheck=Automātiski pārbaudīt atjauninājumus
preferences.updates.checkNowBtn=Pārbaudīt tagad
preferences.updates.updateAvailable=Pieejams atjauninājums uz versiju %s.
preferences.updates.lastUpdateCheck=Pēdējā pārbaude: %s
preferences.updates.lastUpdateCheck.never=nekad
preferences.updates.lastUpdateCheck.recently=nesen
preferences.updates.lastUpdateCheck.daysAgo=Pirms %s dienām
preferences.updates.lastUpdateCheck.hoursAgo=Pirms %s stundām
preferences.updates.checkFailed=Atjauninājumu uzmeklēšana neizdevās. Lūgums pārbaudīt savu interneta savienojumu vai vēlāk mēģināt vēlreiz.
preferences.updates.upToDate=Cryptomator ir jaunākā versija.
## Contribution
preferences.contribute=Atbalstīt mūs
preferences.contribute.registeredFor=Atbalstītāja sertifikāts ir reģistrēts %s
preferences.contribute.noCertificate=Atbalsti Cryptomator un saņem atbalstītāja sertifikātu! Tas ir kā licences atslēga, bet lieliskiem cilvēkiem, kuri izmanto brīvo programmatūru. ;-)
preferences.contribute.getCertificate=Vēl nav tāda? Uzzini, kā to var iegūt!
preferences.contribute.promptText=Šeit jāielīmē atbalstītāja sertifikāta kods
preferences.contribute.thankYou=Paldies par Cryptomator atvērtā pirmkoda izstrādes atbalstīšanu!
preferences.contribute.donate=Ziedot
preferences.contribute.sponsor=Pabalstīt
### Remove License Key Dialog
removeCert.title=Noņemt sertifikātu
removeCert.message=Noņemt atbalstītāja sertifikātu?
removeCert.description=Šis neietekmē Cryptomator pamata iespējas. Nav ne ierobežota piekļuve glabātavām, ne pazemināts drošības līmenis.
#<-- Add entries for donations and code/translation/documentation contribution -->
## About
preferences.about=Par
preferences.about=Par lietotni
# Vault Statistics
stats.title=%s pārskats
stats.cacheHitRate=Kešatmiņas trāpījumu attiecība
## Read
stats.read.throughput.idle=Lasīšana: dīkstāvē
stats.read.throughput.kibs=Lasīšana: %.2f KiB/s
stats.read.throughput.mibs=Lasīšana: %.2f MiB/s
stats.read.total.data.none=Lasītie dati: -
stats.read.total.data.kib=Lasītie dati: %.1f KiB
stats.read.total.data.mib=Lasītie dati: %.1f MiB
stats.read.total.data.gib=Lasītie dati: %.1f GiB
stats.decr.total.data.none=Atšifrētie dati: -
stats.decr.total.data.kib=Atšifrētie dati: %.1f KiB
stats.decr.total.data.mib=Atšifrētie dati: %.1f MiB
stats.decr.total.data.gib=Atšifrētie dati: %.1f GiB
stats.read.accessCount=Lasīšanas pavisam: %d
## Write
stats.write.throughput.idle=Rakstīšana: dīkstāvē
stats.write.throughput.kibs=Rakstīšana: %.2f KiB/s
stats.write.throughput.mibs=Rakstīšana: %.2f MiB/s
stats.write.total.data.none=Rakstītie dati: -
stats.write.total.data.kib=Rakstītie dati: %.1f KiB
stats.write.total.data.mib=Rakstītie dati: %.1f MiB
stats.write.total.data.gib=Rakstītie dati: %.1f GiB
stats.encr.total.data.none=Šifrētie dati: -
stats.encr.total.data.kib=Šifrētie dati: %.1f KiB
stats.encr.total.data.mib=Šifrētie dati: %.1f MiB
stats.encr.total.data.gib=Šifrētie dati: %.1f GiB
stats.write.accessCount=Rakstīšanas pavisam: %d
## Accesses
stats.access.current=Piekļuves: %d
stats.access.total=Piekļuves pavisam: %d
# Main Window
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Klikšķināt šeit, lai pievienotu glabātavu
main.vaultlist.contextMenu.remove=Noņemt…
main.vaultlist.emptyList.onboardingInstruction=Spied šeit, lai pievienotu glabātuvi
main.vaultlist.contextMenu.lock=Aizslēgt
main.vaultlist.contextMenu.unlock=Atslēgt…
main.vaultlist.contextMenu.unlockNow=Atslēgt tagad
main.vaultlist.contextMenu.vaultoptions=Rādīt glabātavas iespējas
main.vaultlist.contextMenu.reveal=Atklāt disku
main.vaultlist.addVaultBtn.menuItemNew=Izveidot jaunu glabātavu...
main.vaultlist.addVaultBtn.menuItemExisting=Atvērt esošu glabātavu...
main.vaultlist.showEventsButton.tooltip=Atvērt notikumu skatu
##Notificaition
main.notification.updateAvailable=Ir pieejams atjauninājums.
main.notification.support=Atbalstīt Cryptomator.
## Vault Detail
### Welcome
main.vaultDetail.welcomeOnboarding=Paldies par izvēlēšanos izmantot Cryptomator, lai aizsargātu savas datnes! Ja ir nepieciešama jebkāda palīdzība, ir vērts ieskatīties mūsu darba uzsākšanas norādēs:
main.vaultDetail.welcomeOnboarding=Paldies, ka izvēlējāties Cryptomator lai aizsargātu jūsu datus. Ja jums nepieciešama palīdzība, iepazīstieties ar mūsu darba sākšanas ceļvežiem:
### Locked
main.vaultDetail.lockedStatus=AIZSLĒGTA
main.vaultDetail.unlockBtn=Atslēgt…
main.vaultDetail.lockedStatus=AIZSLĒGTS
main.vaultDetail.unlockNowBtn=Atslēgt tagad
main.vaultDetail.optionsBtn=Glabātavas iespējas
main.vaultDetail.passwordSavedInKeychain=Parole saglabāta
main.vaultDetail.share=Kopīgot…
main.vaultDetail.optionsBtn=Glabātuves opcijas
### Unlocked
main.vaultDetail.unlockedStatus=ATSLĒGTS
main.vaultDetail.accessLocation=Glabātavas saturs ir pieejams šeit:
main.vaultDetail.accessLocation=Jūsu glabātuves saturs ir pieejams šeit:
main.vaultDetail.revealBtn=Atklāt disku
main.vaultDetail.copyUri=Ievietot URI starpliktuvē
main.vaultDetail.lockBtn=Aizslēgt
main.vaultDetail.bytesPerSecondRead=Lasīšana:
main.vaultDetail.bytesPerSecondWritten=Rakstīšana:
main.vaultDetail.bytesPerSecondRead=Nolasīts:
main.vaultDetail.throughput.idle=dīkstāvē
main.vaultDetail.throughput.kbps=%.1f KiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=Glabātavas pārskats
main.vaultDetail.locateEncryptedFileBtn=Noteikt šifrētas datnes atrašanās vietu
main.vaultDetail.locateEncryptedFileBtn.tooltip=Jāizvēlas datne no savas glabātavas, lai noteiktu tai atbilstošās šifrētās datnes atrašanās vietu
main.vaultDetail.encryptedPathsCopied=Ceļi ievietoti starpliktuvē.
main.vaultDetail.locateEncrypted.filePickerTitle=Atlasīt glabātavā esošu datni
main.vaultDetail.decryptName.buttonLabel=Atšifrēt datnes nosaukumu
main.vaultDetail.decryptName.tooltip=Izvēlēties šifrētu glabātavu, lai atšifrētu tās nosaukumu
### Missing
main.vaultDetail.missing.info=Cryptomator šajā ceļā nevarēja atrast glabātavu.
main.vaultDetail.missing.recheck=Pārbaudīt atkārtoti
main.vaultDetail.missing.remove=Noņemt no glabātavu saraksta…
main.vaultDetail.missing.changeLocation=Mainīt glabātavas atrašanās vietu…
main.vaultDetail.missing.info=Cryptomator šajā ceļā nevarēja atrast glabātuvi.
### Needs Migration
main.vaultDetail.migrateButton=Jaunināt glabātavu
main.vaultDetail.migratePrompt=Glabātavu ir nepieciešams jaunināt uz jaunu veidolu, pirms tai varēs piekļūt
main.vaultDetail.migrateButton=Jaunināt glabātuvi
main.vaultDetail.migratePrompt=Lai jūsu varētu piekļūt glabātuvei to ir nepieciešms jaunināt uz jaunu formātu
### Error
main.vaultDetail.error.info=Glabātavas ielādēšanas no diska laikā atgadījās kļūda.
main.vaultDetail.error.reload=Pārlādēt
main.vaultDetail.error.windowTitle=Kļūda glabātavas ielādēšanā
# Wrong File Alert
wrongFileAlert.title=Kā šifrēt datnes
wrongFileAlert.message=Vai mēģināji šifrēt šīs datnes?
wrongFileAlert.description=Šim nolūkam Cryptomator sistēmas datņu pārvaldniekā nodrošina sējumus.
wrongFileAlert.instruction.0=Lai šifrētu datnes, jāizpilda šādas darbības:
wrongFileAlert.instruction.1=1. Jāatslēdz sava glabātava.
wrongFileAlert.instruction.2=2. Jāklikšķina uz "Atklāt", lai atvērtu sējumu datņu pārvaldniekā.
wrongFileAlert.instruction.3=3. Šajā sējumā jāpievieno savas datnes.
wrongFileAlert.link=Lai iegūtu turpmāku palīdzību, apmeklē
wrongFileAlert.message=Vai jūs mēģinājāt šifrēt šīs datnes?
wrongFileAlert.description=Šim nolūkam Cryptomator jūsu sistēmas datņu pārvaldniekā nodrošina sējumus.
wrongFileAlert.instruction.0=Lai šifrētu datnes, sekojiet šiem soļiem:
wrongFileAlert.instruction.1=1. Atslēdziet jūsu glabātuvi.
wrongFileAlert.instruction.2=2. Spiediet uz "Atklāt", lai atvērtu sējumu jūsu datņu pārvaldniekā.
wrongFileAlert.instruction.3=Šim sējumam pievienojiet jūsu datnes.
wrongFileAlert.link=Lai iegūtu turpmāku palīdzību, apmeklējiet
# Vault Options
## General
vaultOptions.general=Vispārēji
vaultOptions.general.vaultName=Glabātavas nosaukums
vaultOptions.general.autoLock.lockAfterTimePart1=Aizslēgt, kad dīkstāvē
vaultOptions.general.autoLock.lockAfterTimePart2=minūtes
vaultOptions.general.unlockAfterStartup=Atslēgt glabātavu pēc Cryptomator palaišanas
vaultOptions.general.actionAfterUnlock=Pēc sekmīgas atslēgšanas
vaultOptions.general.actionAfterUnlock.ignore=Nedarīt neko
vaultOptions.general.vaultName=Glabātuves nosaukums
vaultOptions.general.unlockAfterStartup=Atslēgt glabātuvi startējot Cryptomator
vaultOptions.general.actionAfterUnlock.reveal=Atklāt disku
vaultOptions.general.actionAfterUnlock.ask=Vaicāt
vaultOptions.general.startHealthCheckBtn=Uzsākt veseluma pārbaudi
## Mount
vaultOptions.mount=Piemontēšana
vaultOptions.mount.info=Atvērt virtuālā diska iestatījumus, lai mainītu noklusējuma vērtības.
vaultOptions.mount.readonly=Tikai lasāms
vaultOptions.mount.customMountFlags=Pielāgoti piemontēšanas karodziņi
vaultOptions.mount=Montē
vaultOptions.mount.readonly=Tikai lasīt
vaultOptions.mount.customMountFlags=Pielāgoti montēšanas parametri
vaultOptions.mount.winDriveLetterOccupied=aizņemts
vaultOptions.mount.mountPoint=Piemontēšanas vieta
vaultOptions.mount.mountPoint.auto=Automātiski izvēlēties piemērotu atrašanās vietu
vaultOptions.mount.mountPoint=Montēšanas vieta
vaultOptions.mount.mountPoint.auto=Automātiski izvēlieties piemērotu vietu
vaultOptions.mount.mountPoint.driveLetter=Izmantot piešķirtu diska burtu
vaultOptions.mount.mountPoint.custom=Izmantot izvēlēto mapi
vaultOptions.mount.mountPoint.directoryPickerButton=Izvēlēties…
vaultOptions.mount.mountPoint.directoryPickerTitle=Izvēlēties mapi
vaultOptions.mount.volumeType.default=Noklusējums (%s)
vaultOptions.mount.volumeType.restartRequired=Lai izmantotu šo sējuma veidu, Cryptomator ir nepieciešams palaist atkārtoti.
vaultOptions.mount.volume.tcp.port=TCP ports
vaultOptions.mount.volume.type=Sējuma veids
vaultOptions.mount.mountPoint.directoryPickerButton=Izvēlies...
## Master Key
vaultOptions.masterkey=Parole
vaultOptions.masterkey.changePasswordBtn=Nomainīt paroli
vaultOptions.masterkey.forgetSavedPasswordBtn=Aizmirst saglabāto paroli
vaultOptions.masterkey.recoveryKeyExplanation=Atkopes atslēga ir vienīgais līdzeklis, lai atjaunotu piekļuvi glabātuvei, ja tiek pazaudēta parole.
vaultOptions.masterkey.showRecoveryKeyBtn=Parādīt atkopes atslēgu
vaultOptions.masterkey.recoverPasswordBtn=Atiestatīt paroli
vaultOptions.masterkey.changePasswordBtn=Mainīt paroli
vaultOptions.masterkey.recoveryKeyExplanation=Atkopšanas atslēga ir jūsu vienīgais līdzeklis, lai atjaunotu piekļuvi glabātuvei, ja pazaudējat paroli.
vaultOptions.masterkey.showRecoveryKeyBtn=Rādīt atkopšanas atslēgu
## Hub
vaultOptions.hub=Atkope
vaultOptions.hub.convertInfo=Atkopes atslēgu var imantot, lai ārkārtas gadījumā pārveidotu šo Hub glabātavu par uz paroli balstītu glabātavu.
vaultOptions.hub.convertBtn=Pārveidot par uz paroli balstītu glabātavu
# Recovery Key
## Display Recovery Key
recoveryKey.display.title=Parādīt atkopes atslēgu
recoveryKey.create.message=Nepieciešama parole
recoveryKey.create.description=Jāievada "%s" parole, lai parādītu tās atkopes atslēgu.
recoveryKey.display.description=Zemāk esošā atkopes atslēga var tikt izmantota, lai atjaunotu piekļuvi "%s":
recoveryKey.display.StorageHints=Tā ir jātur ļoti drošā vietā, piemēram:\n • jāglabā paroļu pārvaldniekā;\n • jāsaglabā USB zibatmiņā;\n • jāizdrukā uz papīra.
recoveryKey.create.description=Lai parādītu "%s" atjaunošanas atslēgu, ievadiet paroli:
recoveryKey.display.description=Šī atjaunošanas atslēga var tikt izmantota, lai atjaunotu "%s":
recoveryKey.display.StorageHints=Glabājiet to drošā vietā, piemēram:\n  • Uzglabājiet to, izmantojot paroļu pārvaldnieku\n  • Saglabājiet to USB zibatmiņā\n  • Izdrukājiet to uz papīra
## Reset Password
### Enter Recovery Key
recoveryKey.recover.title=Atiestatīt paroli
recoveryKey.recover.prompt=Jāievada "%s" atkopes atslēga:
recoveryKey.recover.correctKey=Šī ir derīga atkopes atslēga
recoveryKey.recover.wrongKey=Šī ir citas glabātavas atkopes atslēga
recoveryKey.recover.invalidKey=Šī atkopes atslēga nav derīga
recoveryKey.printout.heading=Cryptomator atkopes atslēga\n"%s" \n
recoveryKey.recover.correctKey=Šī ir derīga atjaunošanas atslēga
recoveryKey.printout.heading=Cryptomator atjaunošanas atslēga\n"%s" \n
### Reset Password
recoveryKey.recover.resetBtn=Atiestatīt
### Recovery Key Password Reset Success
recoveryKey.recover.resetSuccess.message=Paroles atiestatīšana sekmīga
recoveryKey.recover.resetSuccess.description=Savu glabātavu var atslēgt ar jauno paroli.
# Convert Vault
convertVault.title=Pārveidot glabātavu
convertVault.convert.convertBtn.before=Pārveidot
convertVault.convert.convertBtn.processing=Pārveido…
convertVault.success.message=Pārveidošana sekmīga
convertVault.hubToPassword.success.description=Glabātavu tagad var atslēgt ar izvēlēto paroli bez nepieciešamības pēc Hub piekļuves.
# New Password
newPassword.promptText=Jāievada jaunā parole
newPassword.reenterPassword=Apstiprināt jauno paroli
newPassword.promptText=Ievadiet jauno paroli
newPassword.reenterPassword=Apstipriniet jauno paroli
newPassword.passwordsMatch=Parole sakrīt!
newPassword.passwordsDoNotMatch=Paroles nesakrīt
passwordStrength.messageLabel.tooShort=Jāizmanto vismaz %d rakstzīmes
passwordStrength.messageLabel.tooShort=Izmantojiet vismaz %d burtus
passwordStrength.messageLabel.0=Ļoti vāja
passwordStrength.messageLabel.1=Vāja
passwordStrength.messageLabel.2=Vidēja
@@ -532,91 +272,14 @@ passwordStrength.messageLabel.3=Stipra
passwordStrength.messageLabel.4=Ļoti stipra
# Quit
quit.title=Iziet no lietotnes
quit.message=Nav atslēgtu glabātavu
quit.description=Lūgums apstiprināt iziešanu. Cryptomator kārtīgi aizslēgts visas atslēgtās glabātavas, lai novērstu datu zudumu.
quit.lockAndQuitBtn=Aizslēgt un aizvērt
# Forced Quit
quit.forced.message=Dažas glabātavas nevarēja aizslēgt
quit.forced.description=Glabātavu aizslēgšana tika aizturēta nepabeigtu darbību vai atvērtu datņu dēļ. Var veikt atlikušo glabātavu piespiedu aizslēgšanu, tomēr datņu sistēmas darbību pārtraukšana var beigties ar nesaglabāttiem vai zaudētiem datiem.
quit.forced.forceAndQuitBtn=Piespiest un aizvērt
# Update Reminder
updateReminder.title=Atjauninājuma meklēšana
updateReminder.message=Meklēt atjauninājumus?
updateReminder.description=Esi lietas kursā par jaunām iespējām, kļūdu labojumiem un drošības uzlabojumiem! Mēs iesakām automātiski pārbaudīt, vai ir atjauninājumi.
updateReminder.notNow=Ne tagad
updateReminder.yesOnce=Jā, vienreiz
updateReminder.yesAutomatically=Jā, automātiski
#Dokany Support End
dokanySupportEnd.title=Paziņojums par izbeigšanu
dokanySupportEnd.message=Dokany atbalsta beigas
dokanySupportEnd.description=Cryptomator vairs neatbalsta sējuma veidu Dokany. Iestatījumi tika pielāgoti, lai tagad izmantotu noklusējuma sējuma veidu. Noklusējuma veidu var apskatīt iestatījumos.
dokanySupportEnd.preferencesBtn=Atvērt iestatījumus
#Retry If Readonly
retryIfReadonly.title=Ierobežota piekļuve glabātavai
retryIfReadonly.message=Nav rakstīšanas piekļuves glabātavas mapei
retryIfReadonly.description=Cryptomator nevar rakstīt glabātavas mapē. Var mainīt glabātavu, lai tā būtu tikai lasāma, un mēģināt vēlreiz. Šo iespēju var atspējot glabātavas iespējās.
retryIfReadonly.retry=Nomainīt un mēģināt vēlreiz
# Share Vault
shareVault.title=Kopīgot glabātavu
shareVault.message=Vai Tu vēlētos kopīgot savu glabātavu ar citiem?
shareVault.description=Vienmēr jābūt uzmanīgam, kad kopīgo savu glabātavu ar citiem cilvēkiem. Īsumā - jāievēro šīs norādes:
shareVault.instruction.1=1. piekļuve šifrētajai glabātavas mapei jākopīgo caur mākoņkrātuvi;
shareVault.instruction.2=2. glabātavas parole jākopīgo drošā veidā.
shareVault.remarkBestPractices=Lai uzzinātu vairāk, jāieskatās labās prakses ieteikumos mūsu dokumentācijā.
shareVault.docsTooltip=Jāatver dokumentācija, lai uzzinātu vairāk par glabātavu kopīgošanu.
shareVault.hubAd.description=Drošs veids, kā darboties komandās
shareVault.hubAd.keyManagement=• Nulles zināšanu atslēgu pārvaldīšana
shareVault.hubAd.authentication=• Spēcīga autentificēšana
shareVault.hubAd.encryption=• Pilnīga šifrēšana
shareVault.visitHub=Apmeklēt Cryptomator Hub
shareVault.hub.message=Kā kopīgot Hub glabātavu
shareVault.hub.description=Lai varētu kopīgot glabātavas saturu ar citu komandas dalībnieku, jāizpilda divi soļi:
shareVault.hub.instruction.1=1. Piekļuve šifrētajai glabātavas mapei jākopīgo caur mākoņkrātuvi.
shareVault.hub.instruction.2=2. Cryptomator Hub jānodrošina piekļuve komandas dalībniekam.
shareVault.hub.openHub=Atvērt Cryptomator Hub
# Decrypt File Names
decryptNames.title=Atšifrēt datņu nosaukumus
decryptNames.filePicker.title=Atlasīt šifrētu datni
decryptNames.filePicker.extensionDescription=Cryptomator šifrēta datne
decryptNames.copyTable.tooltip=Ievietot tabulu starpliktuvē
decryptNames.clearTable.tooltip=Notīrīt tabulu
decryptNames.copyHint=Ievietot šūnas saturu starpliktuvē ar %s
decryptNames.dropZone.message=Nomest datnes vai klikšķināt, lai atlasītu
decryptNames.dropZone.error.vaultInternalFiles=Atlasītas glabātavas iekšējās datnes ar neatšifrējamu nosaukumu
decryptNames.dropZone.error.foreignFiles=Datnes nepieder glabātavai "%s"
decryptNames.dropZone.error.noDirIdBackup=Atlasīto datņu mapē nav datnes dirId.c9r
decryptNames.dropZone.error.generic=Neizdevās atšifrēt datņu nosaukumus
# Event View
eventView.title=Notikumi
eventView.filter.allVaults=Viss
eventView.clearListButton.tooltip=Notīrīt sarakstu
## event list entries
eventView.entry.vaultLocked.description=Atslēgt "%s", lai redzētu informāciju
eventView.entry.conflictResolved.message=Atrisināta nesaderība
eventView.entry.conflictResolved.showDecrypted=Parādīt atšifrēto datni
eventView.entry.conflictResolved.copyDecrypted=Ievietot starpliktuvē atšifrēto ceļu
eventView.entry.conflict.message=Nesaderības atrisināšana neizdevās
eventView.entry.conflict.showDecrypted=Parādīt atšifrēto, sākotnējo datni
eventView.entry.conflict.copyDecrypted=Ievietot starpliktuvē atšifrēto, sākotnējo datni
eventView.entry.conflict.showEncrypted=Parādīt nesaderīgo, šifrēto datni
eventView.entry.conflict.copyEncrypted=Ievietot starpliktuvē nesaderīgo, šifrēto ceļu
eventView.entry.decryptionFailed.message=Atšifrēšana neizdevās
eventView.entry.decryptionFailed.showEncrypted=Parādīt šifrēto datni
eventView.entry.decryptionFailed.copyEncrypted=Ievietot starpliktuvē šifrēto ceļu
eventView.entry.brokenDirFile.message=Bojāta mapes saite
eventView.entry.brokenDirFile.showEncrypted=Parādīt bojāto, šifrēto saiti
eventView.entry.brokenDirFile.copyEncrypted=Ievietot starpliktuvē bojātās saites ceļu
eventView.entry.brokenFileNode.message=Bojāts datņu sistēmas mezgls
eventView.entry.brokenFileNode.showEncrypted=Parādīt bojāto, šifrēto mezglu
eventView.entry.brokenFileNode.copyEncrypted=Ievietot starpliktuvē botjātā, šifrētā mezgla ceļu
eventView.entry.brokenFileNode.copyDecrypted=Ievietot starpliktuvē atšifrēto ceļu

View File

@@ -167,10 +167,3 @@ vaultOptions.mount.mountPoint.directoryPickerButton=Избор…
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -121,10 +121,3 @@
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Avvis
## Button
generic.button.apply=Bruk
generic.button.back=Tilbake
@@ -282,6 +281,7 @@ preferences.title=Innstillinger
## General
preferences.general=Generelt
preferences.general.startHidden=Skjul vinduet når du starter Cryptomator
preferences.general.autoCloseVaults=Låsen åpner hvelv automatisk ved avslutning av programmet
preferences.general.debugLogging=Aktiver loggføring av feilsøk
preferences.general.debugDirectory=Vis loggfiler
preferences.general.autoStart=Start Cryptomator ved systemstart
@@ -413,6 +413,7 @@ main.vaultDetail.stats=Hvelvstatistikk
main.vaultDetail.locateEncryptedFileBtn=Finn kryptert fil
main.vaultDetail.locateEncryptedFileBtn.tooltip=Velg en fil fra hvelvet ditt for å finne den krypterte motparten
main.vaultDetail.encryptedPathsCopied=Stier kopiert til utklippstavlen!
main.vaultDetail.filePickerTitle=Velg Fil I Hvelvet
### Missing
main.vaultDetail.missing.info=Cryptomator kunne ikke finne et hvelv på denne søkestien.
main.vaultDetail.missing.recheck=Kontroller igjen
@@ -556,10 +557,4 @@ shareVault.hub.message=Hvordan dele et Hub-hvelv
shareVault.hub.description=For å dele hvelvets innhold med et annet lagmedlem må du utføre to trinn:
shareVault.hub.instruction.1=1. Del tilgang til den krypterte hvelvmappen via skylagring.
shareVault.hub.instruction.2=2. Gi tilgang til lagmedlem i Cryptomator Hub.
shareVault.hub.openHub=Åpne Cryptomator hub
# Decrypt File Names
# Event View
## event list entries
shareVault.hub.openHub=Åpne Cryptomator hub

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Afwijzen
## Button
generic.button.apply=Toepassen
generic.button.back=Terug
@@ -49,7 +48,7 @@ addvaultwizard.new.nameInstruction=Kies een naam voor de kluis
addvaultwizard.new.namePrompt=Kluisnaam
### Location
addvaultwizard.new.locationInstruction=Waar moet Cryptomator de versleutelde bestanden van je kluis opslaan?
addvaultwizard.new.locationLoading=Lokaal bestandssysteem controleren op standaard cloudopslagmappen…
addvaultwizard.new.locationLoading=Lokaal bestandssysteem controleren op standaard cloud opslag mappen…
addvaultwizard.new.locationLabel=Opslaglocatie
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Andere locatie
@@ -283,7 +282,7 @@ preferences.title=Voorkeuren
## General
preferences.general=Algemeen
preferences.general.startHidden=Verberg venster bij het opstarten van Cryptomator
preferences.general.autoCloseVaults=Vergrendel kluizen zonder te vragen bij het afsluiten van de toepassing
preferences.general.autoCloseVaults=Open kluizen automatisch vergrendelen bij het afsluiten van de applicatie
preferences.general.debugLogging=Debug logging aanzetten
preferences.general.debugDirectory=Logboekbestanden bekijken
preferences.general.autoStart=Start Cryptomator als het systeem opstart
@@ -395,7 +394,6 @@ main.vaultlist.contextMenu.vaultoptions=Laat kluisinstellingen zien
main.vaultlist.contextMenu.reveal=Toon Schijf
main.vaultlist.addVaultBtn.menuItemNew=Nieuwe Kluis Aanmaken...
main.vaultlist.addVaultBtn.menuItemExisting=Open Bestaande Kluis...
main.vaultlist.showEventsButton.tooltip=Afspraakweergave openen
##Notificaition
main.notification.updateAvailable=Update beschikbaar.
main.notification.support=Steun Cryptomator.
@@ -424,9 +422,7 @@ main.vaultDetail.stats=Kluisstatistieken
main.vaultDetail.locateEncryptedFileBtn=Zoek versleuteld bestand
main.vaultDetail.locateEncryptedFileBtn.tooltip=Kies een bestand uit je kluis om de versleutelde tegenhanger te vinden
main.vaultDetail.encryptedPathsCopied=Pad gekopieerd naar klembord!
main.vaultDetail.locateEncrypted.filePickerTitle=Selecteer bestand binnen de kluis
main.vaultDetail.decryptName.buttonLabel=Bestandsnaam decoderen
main.vaultDetail.decryptName.tooltip=Kies een versleuteld kluisbestand om de naam te decoderen
main.vaultDetail.filePickerTitle=Selecteer bestand binnen de kluis
### Missing
main.vaultDetail.missing.info=Cryptomator kon op dit pad geen kluis vinden.
main.vaultDetail.missing.recheck=Controleer nog eens
@@ -580,43 +576,4 @@ shareVault.hub.message=Hoe een Hub kluis delen
shareVault.hub.description=Om de inhoud van de kluis te delen met een ander teamlid, moet u twee stappen uitvoeren:
shareVault.hub.instruction.1=1. Deel toegang van de versleutelde kluis map via de cloud opslag.
shareVault.hub.instruction.2=2. Geef teamlid toegang in Cryptomator Hub.
shareVault.hub.openHub=Open Cryptomator Hub
# Decrypt File Names
decryptNames.title=Bestandsnaam decoderen
decryptNames.filePicker.title=Selecteer versleuteld bestand
decryptNames.filePicker.extensionDescription=Cryptomator versleuteld bestand
decryptNames.copyTable.tooltip=Kopieer tabel
decryptNames.clearTable.tooltip=Wis tabel
decryptNames.copyHint=Kopieer cel inhoud met %s
decryptNames.dropZone.message=Sleep bestanden of klik om te selecteren
decryptNames.dropZone.error.vaultInternalFiles=Kluis interne bestanden zonder ontsleutelbare naam geselecteerd
decryptNames.dropZone.error.foreignFiles=Bestanden behoren niet tot de kluis "%s"
decryptNames.dropZone.error.noDirIdBackup=Map van de geselecteerde bestanden bevat geen dirId.c9r bestand
decryptNames.dropZone.error.generic=Kan bestandsnamen niet decoderen
# Event View
eventView.title=Activiteiten
eventView.filter.allVaults=Alle
eventView.clearListButton.tooltip=Wis lijst
## event list entries
eventView.entry.vaultLocked.description=Ontgrendel "%s" voor details
eventView.entry.conflictResolved.message=Opgelost conflict
eventView.entry.conflictResolved.showDecrypted=Toon gedecodeerd bestand
eventView.entry.conflictResolved.copyDecrypted=Kopieer gedecodeerd pad
eventView.entry.conflict.message=Conflictoplossing is mislukt
eventView.entry.conflict.showDecrypted=Toon gedecodeerd, origineel bestand
eventView.entry.conflict.copyDecrypted=Kopieer gedecodeerd, origineel pad
eventView.entry.conflict.showEncrypted=Conflicterend, versleuteld bestand weergeven
eventView.entry.conflict.copyEncrypted=Conflicterend, versleuteld pad kopiëren
eventView.entry.decryptionFailed.message=Decodering mislukt
eventView.entry.decryptionFailed.showEncrypted=Toon gedecodeerd bestand
eventView.entry.decryptionFailed.copyEncrypted=Kopieer gedecodeerd pad
eventView.entry.brokenDirFile.message=Verbroken directory link
eventView.entry.brokenDirFile.showEncrypted=Toon verbroken gecodeerde link
eventView.entry.brokenDirFile.copyEncrypted=Kopieer pad van verbroken link
eventView.entry.brokenFileNode.message=Kapot bestandssysteemknooppunt
eventView.entry.brokenFileNode.showEncrypted=Toon verbroken gecodeerde link
eventView.entry.brokenFileNode.copyEncrypted=Kopieer pad van verbroken, versleuteld knooppunt
eventView.entry.brokenFileNode.copyDecrypted=Kopieer gedecodeerd pad
shareVault.hub.openHub=Open Cryptomator Hub

View File

@@ -281,10 +281,3 @@ quit.lockAndQuitBtn=Lås og avslutt
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -121,10 +121,3 @@
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=ਖ਼ਾਰਜ
## Button
generic.button.apply=ਲਾਗੂ ਕਰੋ
generic.button.back=ਪਿੱਛੇ
@@ -64,7 +63,6 @@ addvaultwizard.new.validCharacters.dashes=ਹਾਈਫਨ (%s) ਜਾਂ ਹੇ
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=ਵਾਲਟ ਬਣਾਓ
@@ -210,19 +208,14 @@ health.check.runBatchBtn=ਚੁਣੀਆਂ ਚੋਣਾਂ ਨੂੰ ਚਲਾ
## Detail view
health.check.detail.checkScheduled=ਜਾਂਚ ਨੂੰ ਸੈਡਿਊਲ ਕੀਤਾ ਗਿਆ ਹੈ।
health.check.detail.checkRunning=ਜਾਂਚ ਇਸ ਵੇਲੇ ਚੱਲ ਰਹੀ ਹੈ…
health.check.detail.checkFinished=ਜਾਂਚ ਕਾਮਯਾਬੀ ਨਾਲ ਪੂਰੀ ਹੋਈ।
health.check.detail.checkCancelled=ਜਾਂਚ ਨੂੰ ਰੱਦ ਕੀਤਾ ਗਿਆ ਹੈ।
health.check.detail.listFilters.label=ਫਿਲਟਰ
health.check.detail.fixAllSpecificBtn=ਸਭ ਕਿਸਮਾਂ ਨੂੰ ਠੀਕ ਕਰੋ
health.check.exportBtn=ਰਿਪੋਰਟ ਨੂੰ ਐਕਸਪੋਰਟ ਕਰੋ
## Result view
health.result.severityFilter.good=ਵਧੀਆ
health.result.severityFilter.info=ਜਾਣਕਾਰੀ
health.result.severityFilter.warn=ਚੇਤਾਵਨੀ
health.result.severityFilter.crit=ਗੰਭੀਰ
health.result.fixStateFilter.fixable=ਠੀਕ ਕਰਨ ਯੋਗ
health.result.fixStateFilter.notFixable=ਠੀਕ ਨਾ ਕਰਨ ਯੋਗ
health.result.fixStateFilter.fixing=ਠੀਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…
health.result.fixStateFilter.fixed=ਠੀਕ ਕੀਤਾ
health.result.fixStateFilter.fixFailed=ਫੇਲ੍ਹ ਕਰਨਾ ਅਸਫ਼ਲ
## Fix Application
@@ -356,6 +349,7 @@ main.vaultDetail.throughput.kbps=%.1f KiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=ਵਾਲਟ ਅੰਕੜੇ
main.vaultDetail.locateEncryptedFileBtn=ਇੰਕ੍ਰਿਪਟ ਕੀਤੀ ਫਾਇਲ ਨੂੰ ਲੱਭੋ
main.vaultDetail.filePickerTitle=ਵਾਲਟ ਵਿੱਚ ਫਾਇਲ ਨੂੰ ਚੁਣੋ
### Missing
main.vaultDetail.missing.info=Cryptomator ਇਸ ਮਾਗਰ ਉੱਤੇ ਵਾਲਟ ਨਹੀਂ ਲੱਭਿਆ ਸਕੀ।
main.vaultDetail.missing.recheck=ਮੁੜ-ਜਾਂਚੋ
@@ -482,9 +476,6 @@ dokanySupportEnd.message=Dokany ਲਈ ਸਹਿਯੋਗ ਖ਼ਤਮ
dokanySupportEnd.preferencesBtn=ਪਸੰਦੀਦਾ ਖੋਲ੍ਹੋ
#Retry If Readonly
retryIfReadonly.title=ਵਾਲਟ ਪਹੁੰਚ ਲਈ ਪਾਬੰਦੀ ਹੈ
retryIfReadonly.message=ਵਾਲਟ ਡਾਇਰੈਕਟਰੀ ਲਈ ਕੋਈ ਲਿਖਣ ਪਹੁੰਚ ਨਹੀਂ ਹੈ
retryIfReadonly.retry=ਬਦਲੋ ਅਤੇ ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ
# Share Vault
shareVault.title=ਵਾਲਟ ਨੂੰ ਸਾਂਝਾ ਕਰੋ
@@ -501,12 +492,4 @@ shareVault.visitHub=Cryptomator Hub ਨੂੰ ਖੋਲ੍ਹੋ
shareVault.hub.message=ਹੱਬ ਵਾਲਟ ਨੂੰ ਕਿਵੇਂ ਸਾਂਝਾ ਕਰ ਸਕਦੇ ਹਾਂ
shareVault.hub.instruction.1=1. ਇੰਕ੍ਰਿਪਟ ਕੀਤੇ ਵਾਲਟ ਫੋਲਡਰ ਦੀ ਪਹੁੰਚ ਕਲਾਉਡ ਸਟੋਰੇਜ਼ ਰਾਹੀਂ ਸਾਂਝੀ ਕਰੋ।
shareVault.hub.instruction.2=2. Cryptomator Hub ਵਿੱਚ ਟੀਮ ਮੈਂਬਰਾਂ ਨੂੰ ਪਹੁੰਚ ਦੀ ਮਨਜ਼ੂਰੀ ਦਿਓ।
shareVault.hub.openHub=Cryptomator Hub ਨੂੰ ਖੋਲ੍ਹੋ
# Decrypt File Names
# Event View
eventView.filter.allVaults=ਸਭ
## event list entries
shareVault.hub.openHub=Cryptomator Hub ਨੂੰ ਖੋਲ੍ਹੋ

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Odrzuć
## Button
generic.button.apply=Zastosuj
generic.button.back=Wstecz
@@ -177,7 +176,6 @@ hub.registerFailed.description.generic=Wystąpił błąd w procesie rejestracji.
hub.registerFailed.description.deviceAlreadyExists=To urządzenie jest już zarejestrowane dla innego użytkownika. Spróbuj zmienić konto użytkownika lub użyć innego urządzenia.
### Unauthorized
hub.unauthorized.message=Brak dostępu
hub.unauthorized.description=Nie masz uprawnień do otwierania tego sejfu. Skontaktuj się z właścicielem sejfu i poproś o dostęp.
### Requires Account Initialization
hub.requireAccountInit.message=Wymagane działanie
hub.requireAccountInit.description.0=Aby kontynuować, wykonaj wymagane kroki w Twoim
@@ -283,7 +281,7 @@ preferences.title=Ustawienia
## General
preferences.general=Ogólne
preferences.general.startHidden=Ukryj okno podczas uruchamiania programu Cryptomator
preferences.general.autoCloseVaults=Zablokuj sejfy bez pytania, kiedy opuszczasz aplikację
preferences.general.autoCloseVaults=Zablokuj automatycznie otwarte sejfy podczas zamykania aplikacji
preferences.general.debugLogging=Włącz logowanie w trybie debug
preferences.general.debugDirectory=Pokaż pliki logowania
preferences.general.autoStart=Uruchom Cryptomator po uruchomieniu systemu
@@ -423,6 +421,7 @@ main.vaultDetail.stats=Statystyki sejfu
main.vaultDetail.locateEncryptedFileBtn=Zlokalizuj zaszyfrowany plik
main.vaultDetail.locateEncryptedFileBtn.tooltip=Wybierz plik z sejfu, aby zlokalizować jego zaszyfrowany odpowiednik
main.vaultDetail.encryptedPathsCopied=Ścieżki skopiowane do schowka!
main.vaultDetail.filePickerTitle=Wybierz plik wewnątrz sejfu
### Missing
main.vaultDetail.missing.info=Cryptomator nie mógł znaleźć sejfu w tej lokalizacji.
main.vaultDetail.missing.recheck=Ponów próbę
@@ -553,10 +552,6 @@ dokanySupportEnd.description=Typ udziału Dokany nie jest już wspierany przez C
dokanySupportEnd.preferencesBtn=Otwórz ustawienia
#Retry If Readonly
retryIfReadonly.title=Ograniczony dostęp do sejfu
retryIfReadonly.message=Brak dostępu do zapisu w katalogu sejfu
retryIfReadonly.description=Cryptomator nie może zapisywać do katalogu sejfu. Możesz zmienić sejf w tryb tylko do odczytu i spróbować ponownie. Tę opcję można wyłączyć w opcjach sejfu.
retryIfReadonly.retry=Zmień i spróbuj ponownie
# Share Vault
shareVault.title=Udostępnij sejf
@@ -576,10 +571,4 @@ shareVault.hub.message=Jak udostępnić sejf Hub
shareVault.hub.description=Aby udostępnić zawartość sejfu innemu członkowi zespołu, musisz wykonać dwa kroki:
shareVault.hub.instruction.1=1. Udziel dostępu do zaszyfrowanego sejfu przez miejsce w chmurze.
shareVault.hub.instruction.2=2. Udziel dostępu członkowi zespołu w Cryptomator Hub.
shareVault.hub.openHub=Otwórz Cryptomator Hub
# Decrypt File Names
# Event View
## event list entries
shareVault.hub.openHub=Otwórz Cryptomator Hub

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Ignorar
## Button
generic.button.apply=Aplicar
generic.button.back=Anterior
@@ -283,7 +282,7 @@ preferences.title=Preferências
## General
preferences.general=Geral
preferences.general.startHidden=Ocultar janela ao iniciar o Cryptomator
preferences.general.autoCloseVaults=Bloquear cofres sem perguntar ao fechar a aplicação
preferences.general.autoCloseVaults=Bloquear cofres abertos automaticamente ao sair da aplicação
preferences.general.debugLogging=Ativar o registo de erros
preferences.general.debugDirectory=Mostrar ficheiros de registo
preferences.general.autoStart=Iniciar o Cryptomator no início do sistema
@@ -395,7 +394,6 @@ main.vaultlist.contextMenu.vaultoptions=Mostrar opções do Cofre
main.vaultlist.contextMenu.reveal=Revelar unidade
main.vaultlist.addVaultBtn.menuItemNew=Criar novo cofre...
main.vaultlist.addVaultBtn.menuItemExisting=Abrir cofre existente...
main.vaultlist.showEventsButton.tooltip=Abrir visualização do evento
##Notificaition
main.notification.updateAvailable=A atualização está disponível.
main.notification.support=Apoie o Cryptomator.
@@ -424,9 +422,7 @@ main.vaultDetail.stats=Estatísticas do Cofre
main.vaultDetail.locateEncryptedFileBtn=Localizar Ficheiro Encriptado
main.vaultDetail.locateEncryptedFileBtn.tooltip=Escolha um ficheiro do seu cofre para localizar a sua contraparte encriptada
main.vaultDetail.encryptedPathsCopied=Caminhos copiados para a área de transferência!
main.vaultDetail.locateEncrypted.filePickerTitle=Selecionar ficheiro dentro do cofre
main.vaultDetail.decryptName.buttonLabel=Desencriptar nome do ficheiro
main.vaultDetail.decryptName.tooltip=Escolha um ficheiro de cofre encriptado para desencriptar o seu nome
main.vaultDetail.filePickerTitle=Selecione o ficheiro no cofre
### Missing
main.vaultDetail.missing.info=O Cryptomator não conseguiu encontrar um cofre neste diretório.
main.vaultDetail.missing.recheck=Verificar novamente
@@ -580,43 +576,4 @@ shareVault.hub.message=Como partilhar um cofre do Hub
shareVault.hub.description=Para partilhar o conteúdo do cofre com outro membro da equipa, precisa executar duas etapas:
shareVault.hub.instruction.1=1. Partilhe o acesso à pasta encriptada do cofre via armazenamento na nuvem.
shareVault.hub.instruction.2=2. Conceder acesso ao membro da equipe no Hub Cryptomator.
shareVault.hub.openHub=Abrir Hub do Cryptomator
# Decrypt File Names
decryptNames.title=Desencriptar nomes de ficheiros
decryptNames.filePicker.title=Selecione o ficheiro encriptado
decryptNames.filePicker.extensionDescription=Ficheiro encriptado do Cryptomator
decryptNames.copyTable.tooltip=Copiar tabela
decryptNames.clearTable.tooltip=Limpar tabela
decryptNames.copyHint=Copiar conteúdo da célula com %s
decryptNames.dropZone.message=Solte os ficheiros ou clique para selecionar
decryptNames.dropZone.error.vaultInternalFiles=Ficheiros internos do cofre sem nome decifrável selecionado
decryptNames.dropZone.error.foreignFiles=Ficheiros não pertencem ao cofre "%s"
decryptNames.dropZone.error.noDirIdBackup=O diretório dos ficheiros selecionados não contém o ficheiro dirId.c9r
decryptNames.dropZone.error.generic=Falha ao desencriptar nomes de ficheiros
# Event View
eventView.title=Eventos
eventView.filter.allVaults=Todos
eventView.clearListButton.tooltip=Limpar lista
## event list entries
eventView.entry.vaultLocked.description=Desbloquear "%s" para detalhes
eventView.entry.conflictResolved.message=Conflito resolvido
eventView.entry.conflictResolved.showDecrypted=Mostrar ficheiro desencriptado
eventView.entry.conflictResolved.copyDecrypted=Copiar caminho desencriptado
eventView.entry.conflict.message=Resolução de conflito falhou
eventView.entry.conflict.showDecrypted=Mostrar ficheiro original desencriptado
eventView.entry.conflict.copyDecrypted=Copie caminho original desencriptado
eventView.entry.conflict.showEncrypted=Mostrar ficheiro encriptado conflitante
eventView.entry.conflict.copyEncrypted=Copiar caminho encriptado conflituante
eventView.entry.decryptionFailed.message=Falha na desencriptação
eventView.entry.decryptionFailed.showEncrypted=Mostrar ficheiro encriptado
eventView.entry.decryptionFailed.copyEncrypted=Copiar caminho de encriptação
eventView.entry.brokenDirFile.message=Link de diretório quebrado
eventView.entry.brokenDirFile.showEncrypted=Mostrar link quebrado e encriptado
eventView.entry.brokenDirFile.copyEncrypted=Copiar caminho do link quebrado
eventView.entry.brokenFileNode.message=Nó do sistema de ficheiros avariado
eventView.entry.brokenFileNode.showEncrypted=Mostrar nó encriptado quebrado
eventView.entry.brokenFileNode.copyEncrypted=Copiar o caminho do nó encriptado e danificado
eventView.entry.brokenFileNode.copyDecrypted=Copiar caminho desencriptado
shareVault.hub.openHub=Abrir Hub do Cryptomator

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Ignorar
## Button
generic.button.apply=Aplicar
generic.button.back=Voltar
@@ -283,7 +282,7 @@ preferences.title=Preferências
## General
preferences.general=Geral
preferences.general.startHidden=Ocultar janela ao iniciar o Cryptomator
preferences.general.autoCloseVaults=Bloquear cofres sem perguntar ao sair do aplicativo
preferences.general.autoCloseVaults=Bloquear cofres abertos automaticamente ao sair do aplicativo
preferences.general.debugLogging=Ativar log de debug
preferences.general.debugDirectory=Mostrar arquivos de log
preferences.general.autoStart=Iniciar o Cryptomator ao inicializar o sistema
@@ -395,7 +394,6 @@ main.vaultlist.contextMenu.vaultoptions=Exibir Opções de Cofre
main.vaultlist.contextMenu.reveal=Revelar Volume
main.vaultlist.addVaultBtn.menuItemNew=Novo Cofre...
main.vaultlist.addVaultBtn.menuItemExisting=Abrir Cofre Existente...
main.vaultlist.showEventsButton.tooltip=Abrir visualização de evento
##Notificaition
main.notification.updateAvailable=Atualização disponível.
main.notification.support=Apoie o Cryptomator.
@@ -424,9 +422,7 @@ main.vaultDetail.stats=Estatísticas do Cofre
main.vaultDetail.locateEncryptedFileBtn=Localizar Arquivo Criptografado
main.vaultDetail.locateEncryptedFileBtn.tooltip=Escolha um arquivo do seu cofre para localizar sua versão criptografada
main.vaultDetail.encryptedPathsCopied=Caminhos copiados para a Área de Transferência!
main.vaultDetail.locateEncrypted.filePickerTitle=Selecionar Arquivo no Cofre
main.vaultDetail.decryptName.buttonLabel=Descriptografar Nome do Arquivo
main.vaultDetail.decryptName.tooltip=Escolha um arquivo criptografado do cofre para descriptografar seu nome
main.vaultDetail.filePickerTitle=Selecione o Arquivo No Cofre
### Missing
main.vaultDetail.missing.info=O Cryptomator não encontrou um cofre neste caminho.
main.vaultDetail.missing.recheck=Verificar novamente
@@ -580,43 +576,4 @@ shareVault.hub.message=Como compartilhar um cofre do Hub
shareVault.hub.description=Para compartilhar o conteúdo do cofre com outro membro da equipe, você precisa executar duas etapas:
shareVault.hub.instruction.1=1. Compartilhe o acesso da pasta do cofre criptografado via armazenamento na nuvem.
shareVault.hub.instruction.2=2. Conceda acesso ao membro da equipe no Cryptomator Hub.
shareVault.hub.openHub=Abrir o Cryptomator Hub
# Decrypt File Names
decryptNames.title=Descriptografar Nomes de Arquivos
decryptNames.filePicker.title=Selecione o arquivo criptografado
decryptNames.filePicker.extensionDescription=Arquivo criptografado do Cryptomator
decryptNames.copyTable.tooltip=Copiar tabela
decryptNames.clearTable.tooltip=Limpar tabela
decryptNames.copyHint=Copiar conteúdo da célula com %s
decryptNames.dropZone.message=Arraste e solte arquivos ou clique para selecionar
decryptNames.dropZone.error.vaultInternalFiles=Selecionados arquivos internos do cofre sem nome descriptografável
decryptNames.dropZone.error.foreignFiles=Arquivos não pertencem ao cofre "%s"
decryptNames.dropZone.error.noDirIdBackup=Diretório dos arquivos selecionados não contém o arquivo dirId.c9r
decryptNames.dropZone.error.generic=Falha ao descriptografar nomes de arquivos
# Event View
eventView.title=Eventos
eventView.filter.allVaults=Todos
eventView.clearListButton.tooltip=Limpar lista
## event list entries
eventView.entry.vaultLocked.description=Desbloquear "%s" para detalhes
eventView.entry.conflictResolved.message=Conflito resolvido
eventView.entry.conflictResolved.showDecrypted=Mostrar arquivo descriptografado
eventView.entry.conflictResolved.copyDecrypted=Copiar caminho descriptografado
eventView.entry.conflict.message=Resolução de conflitos falhou
eventView.entry.conflict.showDecrypted=Mostrar arquivo original descriptografado
eventView.entry.conflict.copyDecrypted=Copiar caminho original descriptografado
eventView.entry.conflict.showEncrypted=Mostrar arquivo criptografado conflitante
eventView.entry.conflict.copyEncrypted=Copiar caminho criptografado conflitante
eventView.entry.decryptionFailed.message=Decriptação falhou
eventView.entry.decryptionFailed.showEncrypted=Mostrar arquivo criptografado
eventView.entry.decryptionFailed.copyEncrypted=Copiar caminho encriptado
eventView.entry.brokenDirFile.message=Link do diretório quebrado
eventView.entry.brokenDirFile.showEncrypted=Mostrar link quebrado e criptografado
eventView.entry.brokenDirFile.copyEncrypted=Copiar caminho do link quebrado
eventView.entry.brokenFileNode.message=Nó de sistema de arquivos danificado
eventView.entry.brokenFileNode.showEncrypted=Mostrar nó criptografado com falha
eventView.entry.brokenFileNode.copyEncrypted=Copiar caminho do nó quebrado criptografado
eventView.entry.brokenFileNode.copyDecrypted=Copiar caminho descriptografado
shareVault.hub.openHub=Abrir o Cryptomator Hub

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Renunță
## Button
generic.button.apply=Aplică
generic.button.back=Înapoi
@@ -282,6 +281,7 @@ preferences.title=Preferințe
## General
preferences.general=Setări Generale
preferences.general.startHidden=Ascunde fereastra la pornirea Cryptomator
preferences.general.autoCloseVaults=Încuie seifurile deschise la ieșirea din aplicație automat
preferences.general.debugLogging=Activează jurnalul de depanare
preferences.general.debugDirectory=Dezvăluie fişierele jurnal
preferences.general.autoStart=Lansați Cryptomator la pornirea sistemului
@@ -419,6 +419,7 @@ main.vaultDetail.stats=Statistici de seif
main.vaultDetail.locateEncryptedFileBtn=Localizează fișier criptat
main.vaultDetail.locateEncryptedFileBtn.tooltip=Alege un fișier din seiful tău pentru a-i localiza echivalentul criptat
main.vaultDetail.encryptedPathsCopied=Căile au fost copiate în Clipboard
main.vaultDetail.filePickerTitle=Alege fișier din seifului
### Missing
main.vaultDetail.missing.info=Cryptomator nu a putut găsi un seif pe această cale.
main.vaultDetail.missing.recheck=Verifică din nou
@@ -567,10 +568,4 @@ shareVault.hub.message=Cum să partajezi un seif Hub
shareVault.hub.description=Pentru a partaja conținutul de seif cu un alt membru al echipei, trebuie să efectuați doi pași:
shareVault.hub.instruction.1=1. Partajarea accesului la folderul criptat din seif prin stocarea in nor.
shareVault.hub.instruction.2=2. Acordă acces membrului echipei din hub-ul Cryptomator.
shareVault.hub.openHub=Deschide Cryptomator Hub
# Decrypt File Names
# Event View
## event list entries
shareVault.hub.openHub=Deschide Cryptomator Hub

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Отклонить
## Button
generic.button.apply=Применить
generic.button.back=Назад
@@ -283,7 +282,7 @@ preferences.title=Настройки
## General
preferences.general=Общие
preferences.general.startHidden=Скрывать окно при запуске Cryptomator
preferences.general.autoCloseVaults=Блокировать хранилища без запроса при выходе из приложения
preferences.general.autoCloseVaults=Автоблокировка открытых хранилищ при выходе из приложения
preferences.general.debugLogging=Вести журнал отладки
preferences.general.debugDirectory=Показать файлы журнала
preferences.general.autoStart=Запускать Cryptomator при старте системы
@@ -395,7 +394,6 @@ main.vaultlist.contextMenu.vaultoptions=Параметры хранилища
main.vaultlist.contextMenu.reveal=Показать диск
main.vaultlist.addVaultBtn.menuItemNew=Создать хранилище...
main.vaultlist.addVaultBtn.menuItemExisting=Открыть имеющееся хранилище...
main.vaultlist.showEventsButton.tooltip=Открыть просмотр события
##Notificaition
main.notification.updateAvailable=Есть обновление.
main.notification.support=Поддержите Cryptomator.
@@ -424,9 +422,7 @@ main.vaultDetail.stats=Статистика хранилища
main.vaultDetail.locateEncryptedFileBtn=Найти зашифрованный файл
main.vaultDetail.locateEncryptedFileBtn.tooltip=Выберите файл из своего хранилища, чтобы найти его зашифрованный дубликат
main.vaultDetail.encryptedPathsCopied=Пути скопированы в буфер обмена.
main.vaultDetail.locateEncrypted.filePickerTitle=Выберите файл внутри хранилища
main.vaultDetail.decryptName.buttonLabel=Расшифровать имя файла
main.vaultDetail.decryptName.tooltip=Выберите зашифрованный файл хранилища для расшифровки его имени
main.vaultDetail.filePickerTitle=Выберите файл внутри хранилища
### Missing
main.vaultDetail.missing.info=Cryptomator не смог найти хранилище по этому пути.
main.vaultDetail.missing.recheck=Перепроверить
@@ -580,43 +576,4 @@ shareVault.hub.message=Как поделиться хранилищем в ха
shareVault.hub.description=Чтобы поделиться содержимым хранилища с другим членом команды, выполните два шага:
shareVault.hub.instruction.1=1. Делитесь доступом к зашифрованной папке хранилища через облако.
shareVault.hub.instruction.2=2. Предоставьте доступ члену команды в хабе Cryptomator.
shareVault.hub.openHub=Открыть хаб Cryptomator
# Decrypt File Names
decryptNames.title=Расшифровать имена файлов
decryptNames.filePicker.title=Выберите зашифрованный файл
decryptNames.filePicker.extensionDescription=Файл, зашифрованный Cryptomator
decryptNames.copyTable.tooltip=Скопировать таблицу
decryptNames.clearTable.tooltip=Очистить таблицу
decryptNames.copyHint=Скопировать содержимое ячейки с %s
decryptNames.dropZone.message=Перетащите файлы или нажмите для выбора
decryptNames.dropZone.error.vaultInternalFiles=Выбраны внутренние файлы хранилища с нерасшифрованными именами
decryptNames.dropZone.error.foreignFiles=Файлы не принадлежат хранилищу "%s"
decryptNames.dropZone.error.noDirIdBackup=Папка выбранных файлов не содержит файла dirId.c9r
decryptNames.dropZone.error.generic=Не удалось расшифровать имена файлов
# Event View
eventView.title=События
eventView.filter.allVaults=Все
eventView.clearListButton.tooltip=Очистить список
## event list entries
eventView.entry.vaultLocked.description=Разблокируйте "%s" для деталей
eventView.entry.conflictResolved.message=Решённый конфликт
eventView.entry.conflictResolved.showDecrypted=Показать расшифрованный файл
eventView.entry.conflictResolved.copyDecrypted=Скопировать расшифрованный путь
eventView.entry.conflict.message=Не удалось решить конфликты
eventView.entry.conflict.showDecrypted=Показать расшифрованный исходный файл
eventView.entry.conflict.copyDecrypted=Скопировать расшифрованный исходный путь
eventView.entry.conflict.showEncrypted=Показать конфликтующий зашифрованный файл
eventView.entry.conflict.copyEncrypted=Скопировать конфликтующий зашифрованный путь
eventView.entry.decryptionFailed.message=Ошибка дешифрования
eventView.entry.decryptionFailed.showEncrypted=Показать зашифрованный файл
eventView.entry.decryptionFailed.copyEncrypted=Скопировать зашифрованный путь
eventView.entry.brokenDirFile.message=Повреждённая ссылка на папку
eventView.entry.brokenDirFile.showEncrypted=Показать повреждённую зашифрованную ссылку
eventView.entry.brokenDirFile.copyEncrypted=Скопировать путь повреждённой ссылки
eventView.entry.brokenFileNode.message=Повреждённый узел файловой системы
eventView.entry.brokenFileNode.showEncrypted=Показать повреждённый зашифрованный узел
eventView.entry.brokenFileNode.copyEncrypted=Скопировать путь повреждённого зашифрованного узла
eventView.entry.brokenFileNode.copyDecrypted=Скопировать расшифрованный путь
shareVault.hub.openHub=Открыть хаб Cryptomator

View File

@@ -138,10 +138,3 @@ hub.registerSuccess.unlockBtn=අගුළුහරින්න
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Zamietnuť
## Button
generic.button.apply=Použiť
generic.button.back=Späť
@@ -49,7 +48,6 @@ addvaultwizard.new.nameInstruction=Zvoľte názov pre trezor
addvaultwizard.new.namePrompt=Názov trezoru
### Location
addvaultwizard.new.locationInstruction=Kde by mal Cryptomator uchovávať šifrované súbory vášho trezoru?
addvaultwizard.new.locationLoading=Kontroluje sa lokálny súborový systém pre predvolené adresáre cloudového úložiska…
addvaultwizard.new.locationLabel=Umiestnenie úložiska
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Vlastné umiestnenie
@@ -138,7 +136,7 @@ unlock.success.revealBtn=Odkryť disk
unlock.error.customPath.message=Nie je možné namapovať trezor na uživateĺskej ceste
unlock.error.customPath.description.notSupported=Ak chcete naďalej používať vlastnú cestu, prejdite do nastavení a vyberte typ zväzku, ktorý ju podporuje. V opačnom prípade prejdite na možnosti trezoru a vyberte podporovaný bod pripojenia.
unlock.error.customPath.description.notExists=Vlastná cesta pripojenia neexistuje. Buď ju vytvorte v miestnom súborovom systéme, alebo ju zmeňte v možnostiach trezora.
unlock.error.customPath.description.inUse=Písmeno disku alebo zvolená mapovaná cesta "%s" sa aktuálne používa.
unlock.error.customPath.description.inUse=Písmeno disku alebo vlastná cesta pripojenia "%s" sa už používa.
unlock.error.customPath.description.hideawayNotDir=Dočasne, skrytý súbor "%3$s" použitý pre odomknutie nemôže byť odstránený. Prosím skontrolujte súbor a následne zmažte manuálne.
unlock.error.customPath.description.couldNotBeCleaned=Váš trezor sa nepodarilo pripojiť na cestu "%s". Skúste to prosím znova alebo vyberte inú cestu.
unlock.error.customPath.description.notEmptyDir=Vlastná cesta pripojenia "%s" nie je prázdny priečinok. Vyberte prázdny priečinok a skúste to znova.
@@ -170,7 +168,6 @@ hub.registerSuccess.unlockBtn=Odomknúť
hub.registerFailed.message=Registrácia zariadenia zlyhala
### Unauthorized
hub.unauthorized.message=Prístup zamietnutý
hub.unauthorized.description=Nie ste autorizovaný na otvorenie tohto trezora. Kontaktujte vlastníka trezora pre vyžiadanie prístupu.
### Requires Account Initialization
hub.requireAccountInit.message=Vyžadovaná akcia
hub.requireAccountInit.description.0=Pre pokračovanie vyplňte potrebné kroky vo vašom
@@ -276,7 +273,7 @@ preferences.title=Predvoľby
## General
preferences.general=Hlavné
preferences.general.startHidden=Skryť okno počas štartu Cryptomator-a
preferences.general.autoCloseVaults=Uzamknúť trezory bez výzvy keď ukončujete aplikáciu
preferences.general.autoCloseVaults=Uzamknúť otvorené trezory pri ukončovaní aplikácie
preferences.general.debugLogging=Povoliť logovanie chýb
preferences.general.debugDirectory=Ukázať súbory logov
preferences.general.autoStart=Spustiť Cryptomator pri štarte systému
@@ -388,7 +385,6 @@ main.vaultlist.contextMenu.vaultoptions=Ukáž možnosti trezora
main.vaultlist.contextMenu.reveal=Odkry disk
main.vaultlist.addVaultBtn.menuItemNew=Vytvoriť Nový trezor…
main.vaultlist.addVaultBtn.menuItemExisting=Otvoriť Existujúci trezor...
main.vaultlist.showEventsButton.tooltip=Otvoriť zobrazenie udalosti
##Notificaition
main.notification.updateAvailable=Aktualizácia je k dispozícii.
main.notification.support=O aplikácii Cryptomator.
@@ -417,9 +413,7 @@ main.vaultDetail.stats=Štatistiky trezora
main.vaultDetail.locateEncryptedFileBtn=Lokalizujte zašifrovaný súbor
main.vaultDetail.locateEncryptedFileBtn.tooltip=Zvoľte súbor z Vášho trezora pre lokalizáciu šifrovaného náprotivku
main.vaultDetail.encryptedPathsCopied=Cesty skopírované do clipboard-u!
main.vaultDetail.locateEncrypted.filePickerTitle=Zvoľte súbor v trezore
main.vaultDetail.decryptName.buttonLabel=Dešifrovať názov súboru
main.vaultDetail.decryptName.tooltip=Vyberte zašifrovaný súbor trezoru na dešifrovanie jeho názvu
main.vaultDetail.filePickerTitle=Zvoľte súbor v trezore
### Missing
main.vaultDetail.missing.info=Cryptomator nevie nájsť trezor na tejto ceste.
main.vaultDetail.missing.recheck=Prekontrolovať
@@ -549,52 +543,8 @@ dokanySupportEnd.description=Typ média Dokany už Cryptomator viac nepodporuje.
dokanySupportEnd.preferencesBtn=Otvoriť predvoľby
#Retry If Readonly
retryIfReadonly.title=Obmedziť prístup k trezoru
retryIfReadonly.message=Bez možnosti zápisu do adresára trezora
retryIfReadonly.description=Cryptomator nemôže zapisovať do adresára trezora. Môžte zmeniť trezor len na čítanie a vyskúšať znovu. Táto voľba môže byť zakázaná v nastaveniach trezora.
retryIfReadonly.retry=Zmeniť a skúsiť znova
# Share Vault
shareVault.title=Zdielať trezor
shareVault.hubAd.authentication=* Silná autentifikácia
shareVault.hubAd.encryption=* Šifrovanie end-to-end
# Decrypt File Names
decryptNames.title=Dešifrovať názvy súborov
decryptNames.filePicker.title=Vyberte zašifrovaný súbor
decryptNames.filePicker.extensionDescription=Cryptomator zašifrovaný súbor
decryptNames.copyTable.tooltip=Kopírovať tabuľku
decryptNames.clearTable.tooltip=Vymazať tabuľku
decryptNames.copyHint=Kopírovať obsah bunky s %s
decryptNames.dropZone.message=Presuňte súbory alebo ich kliknutím vyberte
decryptNames.dropZone.error.vaultInternalFiles=Interné súbory trezora bez vybratého názvu, ktorý je možné dešifrovať
decryptNames.dropZone.error.foreignFiles=Súbory nepatria do trezoru "%s"
decryptNames.dropZone.error.noDirIdBackup=Adresár vybraných súborov neobsahuje súbor dirId.c9r
decryptNames.dropZone.error.generic=Nepodarilo sa dešifrovať názvy súborov
# Event View
eventView.title=Udalosti
eventView.filter.allVaults=Všetko
eventView.clearListButton.tooltip=Vymazať zoznam
## event list entries
eventView.entry.vaultLocked.description=Podrobnosti získate odomknutím „%s“
eventView.entry.conflictResolved.message=Vyriešený konflikt
eventView.entry.conflictResolved.showDecrypted=Zobraziť dešifrovaný súbor
eventView.entry.conflictResolved.copyDecrypted=Skopírujte dešifrovanú cestu
eventView.entry.conflict.message=Riešenie konfliktu zlyhalo
eventView.entry.conflict.showDecrypted=Zobraziť dešifrovaný pôvodný súbor
eventView.entry.conflict.copyDecrypted=Kopírovať dešifrovanú, pôvodnú cestu
eventView.entry.conflict.showEncrypted=Zobraziť konfliktný zašifrovaný súbor
eventView.entry.conflict.copyEncrypted=Kopírovať konfliktnú zašifrovanú cestu
eventView.entry.decryptionFailed.message=Dešifrovanie zlyhalo
eventView.entry.decryptionFailed.showEncrypted=Zobraziť zašifrovaný súbor
eventView.entry.decryptionFailed.copyEncrypted=Skopírujte zašifrovanú cestu
eventView.entry.brokenDirFile.message=Nefunkčný odkaz na adresár
eventView.entry.brokenDirFile.showEncrypted=Zobraziť nefunkčný, šifrovaný odkaz
eventView.entry.brokenDirFile.copyEncrypted=Kopírovať cestu nefunkčného odkazu
eventView.entry.brokenFileNode.message=Poškodený uzol súborového systému
eventView.entry.brokenFileNode.showEncrypted=Zobraziť nefunkčný, zašifrovaný uzol
eventView.entry.brokenFileNode.copyEncrypted=Kopírovať cestu nefunkčného, šifrovaného uzla
eventView.entry.brokenFileNode.copyDecrypted=Skopírujte dešifrovanú cestu

View File

@@ -181,10 +181,3 @@ recoveryKey.recover.invalidKey=Obnovitveni ključ ni pravilen
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -325,10 +325,3 @@ quit.lockAndQuitBtn=Zaključaj i Izađi
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -244,10 +244,3 @@ vaultOptions.masterkey.changePasswordBtn=Promena lozinke
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -1,7 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
generic.action.dismiss=Avfärda
## Button
generic.button.apply=Verkställ
generic.button.back=Bakåt
@@ -283,6 +282,7 @@ preferences.title=Inställningar
## General
preferences.general=Allmänt
preferences.general.startHidden=Dölj fönster när Cryptomator startar
preferences.general.autoCloseVaults=Lås öppna valv automatiskt när du avslutar programmet
preferences.general.debugLogging=Aktivera loggning för felsökning
preferences.general.debugDirectory=Visa loggfiler
preferences.general.autoStart=Starta Cryptomator vid systemstart
@@ -394,7 +394,6 @@ main.vaultlist.contextMenu.vaultoptions=Visa inställningar för valv
main.vaultlist.contextMenu.reveal=Visa enhet
main.vaultlist.addVaultBtn.menuItemNew=Skapa nytt valv...
main.vaultlist.addVaultBtn.menuItemExisting=Öppna befintligt valv...
main.vaultlist.showEventsButton.tooltip=Öppna händelsevy
##Notificaition
main.notification.updateAvailable=Uppdatering tillgänglig.
main.notification.support=Stöd Cryptomator.
@@ -423,9 +422,7 @@ main.vaultDetail.stats=Valv Statistik
main.vaultDetail.locateEncryptedFileBtn=Leta upp krypterad fil
main.vaultDetail.locateEncryptedFileBtn.tooltip=Välj en fil från ditt valv för att hitta dess krypterade motsvarighet
main.vaultDetail.encryptedPathsCopied=Sökvägar kopierade till klippbordet!
main.vaultDetail.locateEncrypted.filePickerTitle=Välj fil inuti valvet
main.vaultDetail.decryptName.buttonLabel=Dekryptera filnamn
main.vaultDetail.decryptName.tooltip=Välj en krypterad valvfil för att dekryptera dess namn
main.vaultDetail.filePickerTitle=Välj fil inuti valvet
### Missing
main.vaultDetail.missing.info=Cryptomator kunde inte hitta någt valv i denna sökväg.
main.vaultDetail.missing.recheck=Kontrollera igen
@@ -579,43 +576,4 @@ shareVault.hub.message=Hur man delar ett navvalv
shareVault.hub.description=För att kunna dela valvinnehållet med en annan gruppmedlem måste du utföra två steg:
shareVault.hub.instruction.1=1. Dela åtkomst till den krypterade valvmappen via molnlagring.
shareVault.hub.instruction.2=2. Ge åtkomst till gruppmedlemmen i Cryptomatornavet.
shareVault.hub.openHub=Öppna kryptomatornav
# Decrypt File Names
decryptNames.title=Dekryptera filnamn
decryptNames.filePicker.title=Välj krypterad fil
decryptNames.filePicker.extensionDescription=Cryptomator krypterad fil
decryptNames.copyTable.tooltip=Kopiera tabell
decryptNames.clearTable.tooltip=Rensa tabell
decryptNames.copyHint=Kopiera cellinnehåll med %s
decryptNames.dropZone.message=Släpp filer eller klicka för att välja
decryptNames.dropZone.error.vaultInternalFiles=Interna valvfiler utan dekrypterbart namn valdes
decryptNames.dropZone.error.foreignFiles=Filer tillhör inte valvet "%s"
decryptNames.dropZone.error.noDirIdBackup=Katalog med valda filer innehåller inte dirId.c9r fil
decryptNames.dropZone.error.generic=Det gick inte att dekryptera filnamn
# Event View
eventView.title=Händelser
eventView.filter.allVaults=Samtliga
eventView.clearListButton.tooltip=Rensa listan
## event list entries
eventView.entry.vaultLocked.description=Lås upp "%s" för detaljer
eventView.entry.conflictResolved.message=Löst konflikt
eventView.entry.conflictResolved.showDecrypted=Visa dekrypterad fil
eventView.entry.conflictResolved.copyDecrypted=Kopiera dekrypterad sökväg
eventView.entry.conflict.message=Konfliktlösning misslyckades
eventView.entry.conflict.showDecrypted=Visa dekrypterad, originalfil
eventView.entry.conflict.copyDecrypted=Kopiera dekrypterad, ursprunglig sökväg
eventView.entry.conflict.showEncrypted=Visa krypterad fil som inte kunde synkroniseras
eventView.entry.conflict.copyEncrypted=Kopiera krypterad sökväg som inte kunde synkroniseras
eventView.entry.decryptionFailed.message=Dekryptering misslyckades
eventView.entry.decryptionFailed.showEncrypted=Visa krypterad fil
eventView.entry.decryptionFailed.copyEncrypted=Kopiera krypterad sökväg
eventView.entry.brokenDirFile.message=Trasig kataloglänk
eventView.entry.brokenDirFile.showEncrypted=Visa trasig, krypterad länk
eventView.entry.brokenDirFile.copyEncrypted=Kopiera sökväg för trasig länk
eventView.entry.brokenFileNode.message=Trasig filsystemsnod
eventView.entry.brokenFileNode.showEncrypted=Visa trasig krypterad nod
eventView.entry.brokenFileNode.copyEncrypted=Kopiera sökväg för trasig, krypterad nod
eventView.entry.brokenFileNode.copyDecrypted=Kopiera dekrypterad sökväg
shareVault.hub.openHub=Öppna kryptomatornav

View File

@@ -244,6 +244,7 @@ preferences.title=Mapendeleo
## General
preferences.general=Jumla
preferences.general.startHidden=Ficha dirisha wakati wa kuanza Cryptomator
preferences.general.autoCloseVaults=Funga kuba kiotomatiki wakati wa kuacha programu
preferences.general.debugLogging=Wezesha utatuzi wa ufunguaji
preferences.general.debugDirectory=Fichua faili za logi
preferences.general.autoStart=Zindua Cryptomator kwenye kuanza kwa mfumo
@@ -360,6 +361,7 @@ main.vaultDetail.stats=Takwimu za Kuba
main.vaultDetail.locateEncryptedFileBtn=Tafuta Faili Iliyosimbwa kwa Njia Fiche
main.vaultDetail.locateEncryptedFileBtn.tooltip=Chagua faili kutoka kwa chumba chako ili kupata mwenza wake uliosimbwa kwa njia fiche
main.vaultDetail.encryptedPathsCopied=Njia Zimenakiliwa kwenye Ubao wa kunakili!
main.vaultDetail.filePickerTitle=Chagua Faili Ndani ya Kuba
### Missing
main.vaultDetail.missing.info=Cryptomator haikuweza kupata kuba katika njia hii.
main.vaultDetail.missing.recheck=Kagua upya
@@ -469,10 +471,3 @@ dokanySupportEnd.preferencesBtn=Fungua Mapendeleo
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -308,10 +308,3 @@ quit.forced.forceAndQuitBtn=கட்டாயப்படுத்தி வெ
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

View File

@@ -125,10 +125,3 @@ preferences.interface.theme.light=కాంతి
#Retry If Readonly
# Share Vault
# Decrypt File Names
# Event View
## event list entries

Some files were not shown because too many files have changed in this diff Show More