Compare commits

..
Author SHA1 Message Date
Armin Schrenk 4bb28f4286 Merge branch 'develop' into release/1.10.0 2023-09-01 16:14:16 +02:00
CryptobotandGitHub 721cdf20e7 New Crowdin updates (#3071)
New translations strings.properties

Arabic; Belarusian; Bengali; Bosnian; Bulgarian; Catalan; Chinese Simplified; Chinese Traditional; Chinese Traditional, Hong Kong; Croatian; Czech; Danish; Dutch; Filipino; Finnish; French; Galician; German; Greek; Hebrew; Hindi; Hungarian; Indonesian; Italian; Japanese; Korean; Latvian; Macedonian; Norwegian Bokmal; Norwegian Nynorsk; Persian; Polish; Portuguese; Portuguese, Brazilian; Punjabi; Romanian; Russian; Serbian (Cyrillic); Serbian (Latin); Sinhala; Slovak; Slovenian; Spanish; Swahili, Tanzania; Swedish; Tamil; Telugu; Thai; Turkish; Ukrainian; Vietnamese; 

[ci skip]
2023-09-01 16:13:46 +02:00
Armin SchrenkandGitHub cf248c5cbc Merge pull request #3080 from purejava/fix-3079
Bring up the main window from the tray on pressing "Show" on the tray…
2023-09-01 16:06:15 +02:00
Armin Schrenk 151ca75e5f Merge branch 'develop' into release/1.10.0 2023-09-01 15:43:44 +02:00
mindmonkandGitHub 0e52b7aff4 Merge pull request #3082 from cryptomator/feature/add-vault-button-to-dropdown
UI Enhancement: Improved 'Add Vault' Button Functionality
2023-08-31 15:39:12 +02:00
Jan-Peter Klein 3a0199a1e5 updated menuItemExisting to display folder icon instead of plus icon 2023-08-31 12:17:57 +02:00
Jan-Peter Klein 50e96095ba moved the context menu creation code to the fxml file 2023-08-31 11:49:49 +02:00
Jan-Peter Klein 2f5bce6229 Merge branch 'develop' into feature/add-vault-button-to-dropdown 2023-08-30 12:06:41 +02:00
Sebastian Stenzel 62f50ce366 rename groups
[ci skip]
2023-08-29 07:52:37 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
864c1c9c0d Bump the all group with 1 update (#3089)
Bumps the all group with 1 update: [org.mockito:mockito-core](https://github.com/mockito/mockito).

- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.4.0...v5.5.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-29 07:48:37 +02:00
Tobias Hagemann ad97338f9b fixes #2517 2023-08-28 15:13:24 +02:00
Armin SchrenkandGitHub 5d596f4fd0 Merge pull request #3017 from Rexbas/out_of_bounds_fix
Reset position when out of display bounds
2023-08-28 14:58:52 +02:00
Rexbas aa14d79642 Restore a closed minimized window at (-32000, -32000) to the last saved position
Fixes #3079, second scenario.
2023-08-23 18:57:04 +02:00
Rexbas 745d435a57 Remove displayConfiguration from settings 2023-08-23 18:57:04 +02:00
Rexbas 094a7c6a20 Check display bounds onShowing event 2023-08-23 18:57:04 +02:00
Rexbas aedbefc38a Reset window position when out of display bounds 2023-08-23 18:57:00 +02:00
dependabot[bot]andGitHub 0cd3cf9e1c Merge pull request #3081 from cryptomator/dependabot/maven/all-f18bb33e46 2023-08-23 13:51:07 +00:00
Jan-Peter Klein ef24141713 new stage titles for addNewVault and addExistingVault 2023-08-23 13:36:41 +02:00
Jan-Peter Klein 820d4ff573 disabled right click on add vault button and enhanced naming 2023-08-23 13:17:38 +02:00
Jan-Peter Klein f024f0ee5d Merge branch 'develop' into feature/add-vault-button-to-dropdown 2023-08-21 13:06:13 +02:00
Jan-Peter Klein a038b34e29 implemented enhanced styling for MenuItems 2023-08-21 13:05:42 +02:00
dependabot[bot]andGitHub 4cc516def6 Bump the all group with 2 updates
Bumps the all group with 2 updates: [com.nulab-inc:zxcvbn](https://github.com/nulab/zxcvbn4j) and [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck).


Updates `com.nulab-inc:zxcvbn` from 1.8.0 to 1.8.2
- [Release notes](https://github.com/nulab/zxcvbn4j/releases)
- [Changelog](https://github.com/nulab/zxcvbn4j/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nulab/zxcvbn4j/compare/1.8.0...1.8.2)

Updates `org.owasp:dependency-check-maven` from 8.3.1 to 8.4.0
- [Release notes](https://github.com/jeremylong/DependencyCheck/releases)
- [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jeremylong/DependencyCheck/compare/v8.3.1...v8.4.0)

---
updated-dependencies:
- dependency-name: com.nulab-inc:zxcvbn
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: org.owasp:dependency-check-maven
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-21 07:01:49 +00:00
Ralph Plawetzki bb1095eb78 Bring up the main window from the tray on pressing "Show" on the tray menu for Windows
Fixes #3079
2023-08-19 19:14:46 +02:00
Armin Schrenk 4c11190be9 Improve error template 2023-08-18 15:11:19 +02:00
Tobias Hagemann 8a7a5eeea1 fixed grammar 2023-08-16 17:17:27 +02:00
Jan-Peter Klein 34328c10bf changed add vault icon to caret down and set contentDisplay RIGHT 2023-08-15 16:31:42 +02:00
Jan-Peter Klein c4d503c8d5 removed unused import 2023-08-15 16:24:07 +02:00
Jan-Peter Klein 5fdf5141a5 removed addVaultWelcome stuff 2023-08-15 14:47:47 +02:00
Jan-Peter Klein 9be00a2693 removed didClickAddVault and added SHORTCUT_O 2023-08-15 14:34:06 +02:00
Jan-Peter Klein 17778f32b9 expanded functionality: implemented showAddNewVaultWizard and showAddExistingVaultWizard functions 2023-08-15 14:30:55 +02:00
Armin Schrenk bcbdad99bc Closes #1929 2023-08-14 17:26:44 +02:00
Jan-Peter Klein 1e6d2bb6fb enhanced ui by introducing context menu for 'add vault' button 2023-08-14 17:15:17 +02:00
Armin Schrenk 57fee3e428 Adding plugin to display junit tests properly in console 2023-08-14 13:44:47 +02:00
Armin Schrenk 4ea45e937a extract mvn build plugin versions to own properties 2023-08-14 10:50:05 +02:00
Armin SchrenkandGitHub dc80d79da0 Merge pull request #3073 from cryptomator/dependabot/maven/all-f66be4cce2
Bump the all group with 20 updates
2023-08-14 10:42:34 +02:00
Armin Schrenk 57f68376fe Merge branch 'develop' into release/1.10.0 2023-08-14 10:28:13 +02:00
dependabot[bot]andGitHub f47cfa60c5 Bump the all group with 20 updates
Bumps the all group with 20 updates:

| Package | Update |
| --- | --- |
| [ch.qos.logback:logback-core](https://github.com/qos-ch/logback) | 1.4.7 to 1.4.11 |
| [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) | 1.4.7 to 1.4.11 |
| org.apache.commons:commons-lang3 | 3.12.0 to 3.13.0 |
| [io.github.coffeelibs:tiny-oauth2-client](https://github.com/coffeelibs/tiny-oauth2-client) | 0.5.1 to 0.6.0 |
| [com.nulab-inc:zxcvbn](https://github.com/nulab/zxcvbn4j) | 1.7.0 to 1.8.0 |
| [com.google.guava:guava](https://github.com/google/guava) | 32.0.1-jre to 32.1.2-jre |
| [com.google.dagger:dagger](https://github.com/google/dagger) | 2.45 to 2.47 |
| [com.google.dagger:dagger-compiler](https://github.com/google/dagger) | 2.45 to 2.47 |
| [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) | 5.9.3 to 5.10.0 |
| [org.mockito:mockito-core](https://github.com/mockito/mockito) | 5.3.1 to 5.4.0 |
| [com.google.jimfs:jimfs](https://github.com/google/jimfs) | 1.2 to 1.3.0 |
| [org.jetbrains:annotations](https://github.com/JetBrains/java-annotations) | 23.0.0 to 24.0.1 |
| [org.cryptomator:integrations-mac](https://github.com/cryptomator/integrations-mac) | 1.2.0 to 1.2.1 |
| [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) | 3.10.1 to 3.11.0 |
| [org.apache.maven.plugins:maven-resources-plugin](https://github.com/apache/maven-resources-plugin) | 3.3.0 to 3.3.1 |
| [org.apache.maven.plugins:maven-dependency-plugin](https://github.com/apache/maven-dependency-plugin) | 3.3.0 to 3.6.0 |
| [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) | 3.0.0-M7 to 3.1.2 |
| [org.codehaus.mojo:license-maven-plugin](https://github.com/mojohaus/license-maven-plugin) | 2.0.0 to 2.2.0 |
| [org.jacoco:jacoco-maven-plugin](https://github.com/jacoco/jacoco) | 0.8.9 to 0.8.10 |
| [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) | 8.1.2 to 8.3.1 |


Updates `ch.qos.logback:logback-core` from 1.4.7 to 1.4.11
- [Commits](https://github.com/qos-ch/logback/compare/v_1.4.7...v_1.4.11)

Updates `ch.qos.logback:logback-classic` from 1.4.7 to 1.4.11
- [Commits](https://github.com/qos-ch/logback/compare/v_1.4.7...v_1.4.11)

Updates `org.apache.commons:commons-lang3` from 3.12.0 to 3.13.0

Updates `io.github.coffeelibs:tiny-oauth2-client` from 0.5.1 to 0.6.0
- [Release notes](https://github.com/coffeelibs/tiny-oauth2-client/releases)
- [Commits](https://github.com/coffeelibs/tiny-oauth2-client/compare/0.5.1...0.6.0)

Updates `com.nulab-inc:zxcvbn` from 1.7.0 to 1.8.0
- [Release notes](https://github.com/nulab/zxcvbn4j/releases)
- [Changelog](https://github.com/nulab/zxcvbn4j/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nulab/zxcvbn4j/compare/1.7.0...1.8.0)

Updates `com.google.guava:guava` from 32.0.1-jre to 32.1.2-jre
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

Updates `com.google.dagger:dagger` from 2.45 to 2.47
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.45...dagger-2.47)

Updates `com.google.dagger:dagger-compiler` from 2.45 to 2.47
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.45...dagger-2.47)

Updates `org.junit.jupiter:junit-jupiter` from 5.9.3 to 5.10.0
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.3...r5.10.0)

Updates `org.mockito:mockito-core` from 5.3.1 to 5.4.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.3.1...v5.4.0)

Updates `com.google.jimfs:jimfs` from 1.2 to 1.3.0
- [Release notes](https://github.com/google/jimfs/releases)
- [Commits](https://github.com/google/jimfs/compare/v1.2...v1.3.0)

Updates `org.jetbrains:annotations` from 23.0.0 to 24.0.1
- [Release notes](https://github.com/JetBrains/java-annotations/releases)
- [Changelog](https://github.com/JetBrains/java-annotations/blob/master/CHANGELOG.md)
- [Commits](https://github.com/JetBrains/java-annotations/compare/23.0.0...24.0.1)

Updates `org.cryptomator:integrations-mac` from 1.2.0 to 1.2.1
- [Release notes](https://github.com/cryptomator/integrations-mac/releases)
- [Commits](https://github.com/cryptomator/integrations-mac/compare/1.2.0...1.2.1)

Updates `org.apache.maven.plugins:maven-compiler-plugin` from 3.10.1 to 3.11.0
- [Release notes](https://github.com/apache/maven-compiler-plugin/releases)
- [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.10.1...maven-compiler-plugin-3.11.0)

Updates `org.apache.maven.plugins:maven-resources-plugin` from 3.3.0 to 3.3.1
- [Release notes](https://github.com/apache/maven-resources-plugin/releases)
- [Commits](https://github.com/apache/maven-resources-plugin/compare/maven-resources-plugin-3.3.0...maven-resources-plugin-3.3.1)

Updates `org.apache.maven.plugins:maven-dependency-plugin` from 3.3.0 to 3.6.0
- [Commits](https://github.com/apache/maven-dependency-plugin/compare/maven-dependency-plugin-3.3.0...maven-dependency-plugin-3.6.0)

Updates `org.apache.maven.plugins:maven-surefire-plugin` from 3.0.0-M7 to 3.1.2
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.0.0-M7...surefire-3.1.2)

Updates `org.codehaus.mojo:license-maven-plugin` from 2.0.0 to 2.2.0
- [Release notes](https://github.com/mojohaus/license-maven-plugin/releases)
- [Commits](https://github.com/mojohaus/license-maven-plugin/compare/license-maven-plugin-2.0.0...2.2.0)

Updates `org.jacoco:jacoco-maven-plugin` from 0.8.9 to 0.8.10
- [Release notes](https://github.com/jacoco/jacoco/releases)
- [Commits](https://github.com/jacoco/jacoco/compare/v0.8.9...v0.8.10)

Updates `org.owasp:dependency-check-maven` from 8.1.2 to 8.3.1
- [Release notes](https://github.com/jeremylong/DependencyCheck/releases)
- [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jeremylong/DependencyCheck/compare/v8.1.2...v8.3.1)

---
updated-dependencies:
- dependency-name: ch.qos.logback:logback-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: ch.qos.logback:logback-classic
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: org.apache.commons:commons-lang3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: io.github.coffeelibs:tiny-oauth2-client
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: com.nulab-inc:zxcvbn
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: com.google.dagger:dagger
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: com.google.dagger:dagger-compiler
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: com.google.jimfs:jimfs
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: org.jetbrains:annotations
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: all
- dependency-name: org.cryptomator:integrations-mac
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: org.apache.maven.plugins:maven-compiler-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: org.apache.maven.plugins:maven-resources-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: org.apache.maven.plugins:maven-dependency-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: org.codehaus.mojo:license-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
- dependency-name: org.jacoco:jacoco-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
- dependency-name: org.owasp:dependency-check-maven
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-14 06:46:37 +00:00
Julian Raufelder de78cd014d Merge branch 'main' into develop 2023-08-11 16:44:23 +02:00
Julian Raufelder 9db53f73e2 Merge branch 'hotfix/1.9.4' 2023-08-11 16:07:37 +02:00
Julian Raufelder e5f0aca477 Finalize 1.9.4 2023-08-11 15:54:50 +02:00
Julian Raufelder 261f2da105 Prepare 1.9.4 2023-08-11 15:53:26 +02:00
Julian Raufelder ef4738f920 Use latest version of Java to avoid using an out of date version when building the release
See https://github.com/actions/setup-java/tree/main#check-latest for further information
2023-08-11 15:52:42 +02:00
Armin Schrenk f23348eda2 Merge branch 'develop' into release/1.10.0 2023-08-09 22:56:05 +02:00
Armin Schrenk 6edfaf3eb6 fix windows installer ci script 2023-08-09 22:55:32 +02:00
Armin Schrenk 9d02035263 Merge branch 'develop' into release/1.10.0 2023-08-09 21:04:54 +02:00
Armin Schrenk 8bbcb86bfc fix windows build script 2023-08-09 20:59:13 +02:00
Armin Schrenk abdc8672f1 update org.openjdk:javafx from 20.0.1 to 20.0.2 2023-08-09 20:41:14 +02:00
Armin Schrenk 333c7457ca bump org.cryptomator:cryptofs from 2.6.6 to 2.6.7 2023-08-09 20:23:51 +02:00
CryptobotandGitHub 9b9a354902 New Crowdin updates (#3029)
New translations strings.properties

Arabic; Belarusian; Bengali; Bosnian; Bulgarian; Catalan; Chinese Simplified; Chinese Traditional; Chinese Traditional, Hong Kong; Croatian; Czech; Danish; Dutch; Filipino; Finnish; French; Galician; German; Greek; Hebrew; Hindi; Hungarian; Indonesian; Italian; Japanese; Korean; Latvian; Macedonian; Norwegian Bokmal; Norwegian Nynorsk; Persian; Polish; Portuguese; Portuguese, Brazilian; Punjabi; Romanian; Russian; Serbian (Cyrillic); Serbian (Latin); Sinhala; Slovak; Slovenian; Spanish; Swahili, Tanzania; Swedish; Tamil; Telugu; Thai; Turkish; Ukrainian; Vietnamese; 

[ci skip]
2023-08-09 15:26:10 +02:00
Sebastian Stenzel 83b2ff8ce8 fixes #3051 2023-08-09 15:20:32 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
b7f514e16b Bump the all group with 2 updates (#3066)
Bumps the all group with 2 updates: [actions/checkout](https://github.com/actions/checkout) and [SamKirkland/FTP-Deploy-Action](https://github.com/samkirkland/ftp-deploy-action).


Updates `actions/checkout` from 2 to 3
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

Updates `SamKirkland/FTP-Deploy-Action` from 4.3.0 to 4.3.4
- [Release notes](https://github.com/samkirkland/ftp-deploy-action/releases)
- [Commits](https://github.com/samkirkland/ftp-deploy-action/compare/4.3.0...v4.3.4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: all
- dependency-name: SamKirkland/FTP-Deploy-Action
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-09 15:03:35 +02:00
Sebastian Stenzel 5c4c59fe18 add dependabot config 2023-08-09 13:19:23 +02:00
mindmonkandGitHub 296ae20cc2 Merge pull request #3060 from cryptomator/feature/error-dialog-lookup-permission
Ask before looking up error code
2023-08-07 16:25:40 +02:00
Jan-Peter Klein 7af5e00d71 clean up imports 2023-08-07 15:11:10 +02:00
Jan-Peter Klein deaf71b4ce Merge branch 'develop' into feature/error-dialog-lookup-permission 2023-08-07 15:08:44 +02:00
Jan-Peter Klein 27f3d85ae2 renamed lookupDatabaseUserPermission to askedForLookupDatabasePermission 2023-08-07 15:08:25 +02:00
Jan-Peter Klein f91a854b3e removed more info hyperlink and fixed ui by moving isLoadingHttpResponse.set(true) 2023-08-07 14:56:01 +02:00
Armin Schrenk be7b265a00 Merge branch 'main' into develop
# Conflicts:
#	pom.xml
2023-08-07 10:27:13 +02:00
Armin Schrenk 34c0f1d13e Merge branch 'hotfix/1.9.3' 2023-08-07 10:26:43 +02:00
Armin Schrenk da21c7fa80 suppress false positive
cherry picked from 9bd5b45ea7
2023-08-07 10:25:42 +02:00
Armin Schrenk 9ae9473b95 finalize 1.9.3 2023-08-07 10:19:04 +02:00
Armin Schrenk 32a17407de Add -NoProfile to windows build script to follow best practices 2023-08-07 10:15:25 +02:00
Tobias HagemannandGitHub 727c32ad50 Merge pull request from GHSA-62gx-54j7-mjh3
Add -NoProfile option to powershell scripts run during windows installer
2023-08-07 10:14:45 +02:00
Armin Schrenk d939e91661 prepare 1.9.3 2023-08-07 10:04:08 +02:00
Armin Schrenk 151f2babd8 Add NoProfile option to powershell scripts run during windows instaler
Closes #GHSA-62gx-54j7-mjh3
2023-08-07 10:02:39 +02:00
Jan-Peter Klein 76340f31d1 undo changes in REPORT_BODY_TEMPLATE 2023-08-04 17:23:35 +02:00
Jan-Peter Klein b2f2d3ac36 Merge branch 'develop' into feature/error-dialog-lookup-permission 2023-08-04 17:03:26 +02:00
Armin Schrenk 9bd5b45ea7 suppress false positive in dependecy-check (jackrabbit-webdav) 2023-08-04 17:01:19 +02:00
Jan-Peter Klein a17b2029ec moved isLoadingHttpResponse.set(true) into void loadHttpResponse 2023-08-04 16:51:28 +02:00
Jan-Peter Klein 4c819807de implemented 'More Info...' hyperlink functionality 2023-08-04 16:12:01 +02:00
Jan-Peter Klein 175e05aae4 Merge branch 'develop' into feature/error-dialog-lookup-permission 2023-08-03 12:54:01 +02:00
Jan-Peter Klein fa3e0efd12 init commit
added new string properties
added ui elements for user permission to look up error solutions in database
modified ErrorController for permission handling
2023-08-03 12:53:44 +02:00
Armin Schrenk d08d992768 Bump integrations-win to 1.2.2 2023-08-02 09:44:31 +02:00
Armin Schrenk 7f0c92e2f0 Bump integrations-linux to 1.3.0-beta6
Fixes #3020
2023-08-02 09:44:18 +02:00
Armin Schrenk f4ad7aa43d References #3045
Use different encoding reading process output
2023-08-01 16:29:36 +02:00
Sebastian Stenzel 1f09a3fa3a allow notarization on manually dispatched builds 2023-08-01 10:04:34 +02:00
Sebastian Stenzel 7d7b88829d allow notarization on manually dispatched builds 2023-08-01 10:04:07 +02:00
Sebastian Stenzel 4078abeb33 Merge branch 'feature/fix-macOS-build' into release/1.10.0 2023-08-01 09:42:29 +02:00
Julian RaufelderandGitHub 6f6c3936aa Merge pull request #3039 from cryptomator/feature/change-error-codes-url
Change error codes URL
2023-07-29 10:04:50 +00:00
Julian RaufelderandGitHub 6771963686 Merge pull request #3038 from cryptomator/feature/change-update-check-url
Change update check URL
2023-07-29 10:04:28 +00:00
Julian Raufelder ab409152e3 Change error codes URL 2023-07-28 16:14:58 +02:00
Julian Raufelder f92cf9c9e0 Change update check URL 2023-07-27 15:49:38 +02:00
Armin SchrenkandGitHub 8b9d5d136e Merge pull request #3033 from cryptomator/feature/fix-macOS-build
CI: Use Temurin JVM+JFX Jmods from Gluon instead of Zulu JVM+FX

Fixes #3030
2023-07-26 19:53:48 +02:00
Armin SchrenkandGitHub 3071cfbfb1 Merge pull request #2885 from purejava/libappindicator
appindicator support

Closes #1645
2023-07-26 14:25:55 +02:00
Armin SchrenkandGitHub 1a153e1f6e Merge branch 'develop' into libappindicator 2023-07-26 14:18:42 +02:00
Armin Schrenk b0a7c23055 correct comment 2023-07-26 14:16:07 +02:00
27ca6591ea Apply suggestions from code review
Co-authored-by: Sebastian Stenzel <overheadhunter@users.noreply.github.com>
2023-07-26 13:01:14 +02:00
Armin Schrenk ad3d36e06a check sha256 sum of downloaded artifact in ci 2023-07-26 11:37:05 +02:00
Armin Schrenk 83e91d361f fix errors in build script 2023-07-25 17:29:34 +02:00
JaniruTECandGitHub 221b4e85bc Merge pull request #2996 from cryptomator/feature/2856-folder-mounts-win
Improve handling of folder-mounts on Win
2023-07-25 15:51:18 +02:00
JaniruTEC b536bd3e09 Applied suggestions from code review
Added exception to method signature
Renamed enum constant

See:
https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1273497818
https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1273499227
2023-07-25 15:33:16 +02:00
Armin Schrenk b73993c375 add jfx to module path 2023-07-25 14:43:29 +02:00
JaniruTEC ae392b4014 Refactored "handleMountPointFolder" (now: "getMountPointState")
See: https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1273277804
2023-07-25 13:34:39 +02:00
JaniruTEC 1c34402c87 Applied minor corrections
See:
https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1273277251
https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1273280687
https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1273287847
2023-07-25 13:17:21 +02:00
Armin Schrenk a415e3b0a9 update local build script to download jfx jmods 2023-07-25 13:08:19 +02:00
Armin Schrenk e41a33d250 fixes #3030 2023-07-25 13:07:40 +02:00
JaniruTEC 587cff9518 Added more tests 2023-07-24 19:22:47 +02:00
JaniruTEC ea8e850aa9 Moved check for dir/emptiness to "handleMountPointFolder" 2023-07-24 19:15:22 +02:00
JaniruTEC 9bb24320bf Stopped user from mounting to vaults to the same path 2023-07-24 18:53:19 +02:00
Armin Schrenk 108df3ddbc Merge branch 'main' into develop
# Conflicts:
#	pom.xml
#	suppression.xml
2023-07-24 16:38:18 +02:00
Armin Schrenk 9ca1ff1a2d Merge branch 'hotfix/1.9.2' 2023-07-24 16:35:33 +02:00
Armin Schrenk 164a350e7e finalize 1.9.2 2023-07-24 16:34:49 +02:00
Tobias HagemannandGitHub b48ebd524b Merge pull request from GHSA-9c9p-c3mg-hpjq
Fix LPE in win installer
2023-07-24 16:23:23 +02:00
Armin Schrenk 7ba9d4de4f Merge branch 'hotfix/1.9.2' into feature/fix-lpe-win-installer 2023-07-24 16:21:54 +02:00
Armin Schrenk 807e718d13 supress non affecting cve
(cherry picked from commit 4e3b2e0be0)
2023-07-24 15:38:42 +02:00
Armin Schrenk 6efb839fd0 prepare 1.10.0 2023-07-24 15:00:28 +02:00
CryptobotandGitHub ca71bb207f New Crowdin updates (#2945)
New translations strings.properties

Arabic; Belarusian; Bengali; Bosnian; Bulgarian; Catalan; Chinese Simplified; Chinese Traditional; Chinese Traditional, Hong Kong; Croatian; Czech; Danish; Dutch; Filipino; Finnish; French; Galician; German; Greek; Hebrew; Hindi; Hungarian; Indonesian; Italian; Japanese; Korean; Latvian; Macedonian; Norwegian Bokmal; Norwegian Nynorsk; Persian; Polish; Portuguese; Portuguese, Brazilian; Punjabi; Romanian; Russian; Serbian (Cyrillic); Serbian (Latin); Sinhala; Slovak; Slovenian; Spanish; Swahili, Tanzania; Swedish; Tamil; Telugu; Thai; Turkish; Ukrainian; Vietnamese; 

[ci skip]
2023-07-24 14:58:36 +02:00
Armin Schrenk 8ed1878035 prepare 1.9.2 2023-07-21 17:07:33 +02:00
Armin Schrenk 4e3b2e0be0 supress non affecting cve 2023-07-21 16:50:27 +02:00
JaniruTEC 59d89faf38 Turned calls to "assumeTrue" into guard functions
See: https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1270734307
2023-07-21 16:48:33 +02:00
Armin Schrenk c2819963d2 Replace custom actions executing bat files to by quiet exec custom actions to surpress shown command prompts
Closes #GHSA-9c9p-c3mg-hpjq

(cherry picked from commit fb1ba6390dfcb7028be0eb051b893b744c0444dc)
2023-07-21 16:05:21 +02:00
JaniruTEC 8f67404766 Fixed method violating API contract
See: https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1269458822
2023-07-21 15:35:56 +02:00
JaniruTEC 1942850888 Replaced OS-Check with Assumptions
See: https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1269461956
2023-07-20 16:44:49 +02:00
JaniruTEC 821cc0940d Stopped wrapping IOEs as UncheckedIOEs
See:
https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1269444937
https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1269445672
https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1269445894
2023-07-20 16:34:51 +02:00
JaniruTEC 419a7ab245 Fixed faulty unit test 2023-07-19 23:53:58 +02:00
JaniruTEC a29ebfd302 Updated error message 2023-07-19 23:39:11 +02:00
JaniruTEC 73da954355 Merge branch 'feature/3001-more-error-messages' into feature/2856-folder-mounts-win
# Conflicts:
# src/main/java/org/cryptomator/common/mount/MountWithinParentUtil.java
# src/main/resources/i18n/strings.properties
2023-07-19 23:38:20 +02:00
JaniruTEC 879e6dcab7 Updated error message
See: https://github.com/cryptomator/cryptomator/pull/3001#discussion_r1268035540
2023-07-19 16:10:48 +02:00
JaniruTEC f9f8a6b357 Added unit tests for MountWithinParentUtil 2023-07-19 15:39:14 +02:00
JaniruTEC 3ea6da3c6d Fixed thrown exception 2023-07-19 15:36:23 +02:00
JaniruTEC bb0b1b3592 Cleaned up merge 2023-07-19 15:36:22 +02:00
JaniruTEC 0b6782d44b Refactored error message to use ObservableValues 2023-07-18 20:11:24 +02:00
Armin Schrenk 238aaeb5a0 bump integrations-api to stable version 2023-07-18 12:40:06 +02:00
JaniruTEC ed6f1ad8d1 Merge branch 'feature/3001-more-error-messages' into feature/2856-folder-mounts-win
# Conflicts:
#	src/main/java/org/cryptomator/common/mount/MountWithinParentUtil.java
2023-07-14 23:05:48 +02:00
JaniruTEC c3ac043c68 Removed MountPointPreparationException
See: https://github.com/cryptomator/cryptomator/pull/3001#discussion_r1263572178
2023-07-14 21:13:11 +02:00
JaniruTEC a90e75ceba Renamed exceptions
See: https://github.com/cryptomator/cryptomator/pull/3001#discussion_r1263563166
2023-07-14 15:09:36 +02:00
JaniruTEC aa2e63acb0 Added @PropertyKey
See: https://github.com/cryptomator/cryptomator/pull/3001#discussion_r1263039593
2023-07-14 14:58:56 +02:00
JaniruTEC a259d554fa Removed unused import
See: https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1263556873
2023-07-14 14:53:00 +02:00
JaniruTEC f5e035fa3b Applied suggestions from code review
Updated log message
Replaced caught exception

See: https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1262297316
https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1262298832
2023-07-13 15:22:21 +02:00
Ralph Plawetzki 9e25d0fcc0 Define property in a single line 2023-07-13 06:43:32 +02:00
JaniruTEC 96ebb67085 Applied suggestions from code review
See: https://github.com/cryptomator/cryptomator/pull/2996#discussion_r1260955250
2023-07-12 19:17:37 +02:00
Ralph Plawetzki 3fbc5e84e3 Define property in a single line 2023-07-12 19:16:04 +02:00
JaniruTEC 614756c740 Added message for HideawayAlreadyExistsException 2023-07-11 22:35:08 +02:00
JaniruTEC 2a9d1e3fba Added messages for MountPointCouldNotBeClearedException and MountPointNotEmptyDirectoryException 2023-07-11 22:33:27 +02:00
JaniruTEC 9361a75cd8 Refactored UnlockInvalidMountPointController to use improved Exceptions 2023-07-11 21:53:18 +02:00
JaniruTEC becc5e316a Made interaction between Unlock logic & UI more consistent 2023-07-11 21:53:18 +02:00
JaniruTEC 08a1e1ec7d Added/Refactored exceptions to account for more cases 2023-07-11 21:53:18 +02:00
JaniruTEC 12f5f41968 Redefined IllegalMountPointException and MountPointPreparationException 2023-07-11 21:53:18 +02:00
Ralph Plawetzki da8410842b Change showTrayIcon to true for all Linux builds 2023-07-11 19:56:22 +02:00
Ralph Plawetzki 1cae1a5f2f Fix setting TRAYICONSDIR 2023-07-11 19:25:37 +02:00
JaniruTEC 5e2e8c35d5 Added cleanup of junctions on Win 2023-07-10 17:38:30 +02:00
JaniruTEC 328f2f89a8 Removed unnecessary checks 2023-07-10 16:01:39 +02:00
JaniruTEC 92b77baf40 Improved handling of existing hideaways 2023-07-10 15:58:38 +02:00
Ralph Plawetzki 3d0741f4d2 Use version 1.3.3 of appindicator-gtk3-java 2023-07-09 19:48:52 +02:00
Ralph Plawetzki b75459fbc6 Revert "Find native libraries on the system"
This reverts commit 58bb266085.
2023-07-09 19:47:52 +02:00
JaniruTEC e484813233 Added check for deletion of hideaway 2023-07-07 16:19:16 +02:00
Sebastian Stenzel 711a3881f8 fix appimage CI build 2023-07-03 11:00:12 +02:00
Sebastian Stenzel 399c5c0565 Merge branch 'develop' into feature/libappindicator 2023-07-03 10:59:50 +02:00
Sebastian Stenzel ca6c1e244c use correct integrations API version 2023-07-03 10:40:50 +02:00
Ralph Plawetzki 449e330992 Merge branch cryptomator/develop 2023-07-01 18:45:45 +02:00
Ralph Plawetzki 0f0855165e Changes due to new handling of system environment
Introduced with PR #2957
2023-07-01 18:02:12 +02:00
Ralph Plawetzki 3ae847d5ad Code improvements and changes
Discussion: https://github.com/cryptomator/integrations-linux/pull/22#pullrequestreview-1479004107
2023-06-15 06:46:05 +02:00
Ralph PlawetzkiandGitHub 58bb266085 Find native libraries on the system 2023-06-14 11:20:15 +02:00
Ralph Plawetzki c8ed30574a Introduce JVM property for the SVG image loading path 2023-06-14 06:02:03 +02:00
Ralph Plawetzki 1cb5a3531a Fix symlinks for icons installed with the ppa 2023-06-06 19:44:02 +02:00
Ralph Plawetzki d5cad1a704 Lost+found
Things I forgot or could be more simple
2023-06-05 19:13:25 +02:00
Sebastian Stenzel c9dd7454f5 Merge branch 'develop' into feature/libappindicator
# Conflicts:
#	pom.xml
2023-06-04 20:40:03 +02:00
Sebastian Stenzel 7a7332a3f6 remove executable bit 2023-06-04 14:29:17 +02:00
Sebastian Stenzel a22bfacfa2 create symlinks from "symbolic" to "scalable" icons 2023-06-04 14:18:05 +02:00
Sebastian Stenzel 1abf591459 cleanup 2023-06-04 14:17:57 +02:00
Ralph Plawetzki 641b21a144 Symbolic icons for the ppa 2023-06-02 06:31:35 +02:00
Ralph Plawetzki 20664ff3d3 1.3.0-beta3 is available 2023-06-02 05:42:04 +02:00
Ralph Plawetzki c8cfe473f1 Set icons by icon name
Needed for icons to work on Mate DE
2023-05-29 15:55:01 +02:00
Ralph Plawetzki ec03bc569c Find tray icons in mounted AppImage 2023-05-27 16:39:24 +02:00
Ralph Plawetzki 1093cb618f Remove double setting symbolic links 2023-05-25 18:56:04 +02:00
Ralph Plawetzki 8c05c774bf Remove unneeded cp launcher.sh 2023-05-25 18:15:39 +02:00
Ralph Plawetzki 6af9132721 Add tray icons to AppImage build script 2023-05-25 18:07:13 +02:00
Ralph Plawetzki 1f443453c7 Modify copy-dependencies for new modules
Fix java.lang.module.FindException: Module jdk.net not found, required by org.freedesktop.dbus.transport.jre
Enable native access for module org.purejava.appindicator
2023-05-25 17:32:06 +02:00
Ralph Plawetzki 71caefbe70 Rename icons and bring them in place 2023-05-25 11:23:24 +02:00
Sebastian StenzelandGitHub 6bb69ea8d3 Merge branch 'develop' into libappindicator 2023-05-10 20:21:54 +02:00
Ralph Plawetzki 06690e98c7 Code improvements continued
Discussion: https://github.com/cryptomator/cryptomator/pull/2885
2023-05-10 06:53:40 +02:00
Ralph Plawetzki 6e858746c1 Keep change to JDK 20 outside of this PR 2023-05-10 06:35:52 +02:00
Ralph Plawetzki 8b94c82889 Use icons provided by tobihagemann 2023-05-10 06:23:57 +02:00
Ralph Plawetzki fbe997e6c4 Revert "Use second icon too provided by tobihagemann"
This reverts commit 491fdaa9bb.
2023-05-10 05:44:53 +02:00
Ralph Plawetzki 491fdaa9bb Use second icon too provided by tobihagemann 2023-05-09 19:52:41 +02:00
Ralph Plawetzki 2d17ad9a2e Add SVG icons to Linux build scripts 2023-05-06 17:36:39 +02:00
Ralph Plawetzki 5502f58637 Move SVG icons for Linux to the right location 2023-05-06 17:29:48 +02:00
Ralph Plawetzki 1006cb506f Fix wrong reference 2023-05-06 17:16:17 +02:00
Ralph Plawetzki d7bc92aa09 org.cryptomator.integrations.linux not needed at all 2023-05-06 17:15:28 +02:00
Ralph Plawetzki 948a62b482 Code improvements continued
Discussion: https://github.com/cryptomator/integrations-linux/pull/18
2023-05-06 09:18:47 +02:00
Ralph Plawetzki 2fbdce26ea Use JEP 433 pattern matching for switch 2023-05-03 09:50:44 +02:00
Ralph Plawetzki 317f3c3458 Move stuff to integrations-linux 2023-04-30 17:08:08 +02:00
Ralph Plawetzki 97cede12b7 Update to JDK 20 2023-04-27 18:39:46 +02:00
Ralph Plawetzki 6da107f4db Add AppindicatorTrayMenuController 2023-04-26 18:24:01 +02:00
120 changed files with 2270 additions and 816 deletions
+24
View File
@@ -0,0 +1,24 @@
version: 2
updates:
- package-ecosystem: "maven"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "06:00"
timezone: "UTC"
groups:
maven-dependencies:
patterns:
- "*"
- package-ecosystem: "github-actions"
directory: "/" # even for `.github/workflows`
schedule:
interval: "monthly"
groups:
github-actions:
patterns:
- "*"
labels:
- "misc:ci"
+9 -3
View File
@@ -30,6 +30,7 @@ jobs:
distribution: 'zulu' distribution: 'zulu'
java-version: ${{ env.JAVA_VERSION }} java-version: ${{ env.JAVA_VERSION }}
java-package: 'jdk+fx' java-package: 'jdk+fx'
check-latest: true
cache: 'maven' cache: 'maven'
- name: Ensure major jfx version in pom equals in jdk - name: Ensure major jfx version in pom equals in jdk
shell: pwsh shell: pwsh
@@ -54,7 +55,7 @@ jobs:
--verbose --verbose
--output runtime --output runtime
--module-path "${JAVA_HOME}/jmods" --module-path "${JAVA_HOME}/jmods"
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net
--strip-native-commands --strip-native-commands
--no-header-files --no-header-files
--no-man-pages --no-man-pages
@@ -80,7 +81,7 @@ jobs:
--copyright "(C) 2016 - 2023 Skymatic GmbH" --copyright "(C) 2016 - 2023 Skymatic GmbH"
--app-version "${{ needs.get-version.outputs.semVerNum }}.${{ needs.get-version.outputs.revNum }}" --app-version "${{ needs.get-version.outputs.semVerNum }}.${{ needs.get-version.outputs.revNum }}"
--java-options "--enable-preview" --java-options "--enable-preview"
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64" --java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator"
--java-options "-Xss5m" --java-options "-Xss5m"
--java-options "-Xmx256m" --java-options "-Xmx256m"
--java-options "-Dcryptomator.appVersion=\"${{ needs.get-version.outputs.semVerStr }}\"" --java-options "-Dcryptomator.appVersion=\"${{ needs.get-version.outputs.semVerStr }}\""
@@ -92,7 +93,8 @@ jobs:
--java-options "-Dcryptomator.p12Path=\"@{userhome}/.config/Cryptomator/key.p12\"" --java-options "-Dcryptomator.p12Path=\"@{userhome}/.config/Cryptomator/key.p12\""
--java-options "-Dcryptomator.ipcSocketPath=\"@{userhome}/.config/Cryptomator/ipc.socket\"" --java-options "-Dcryptomator.ipcSocketPath=\"@{userhome}/.config/Cryptomator/ipc.socket\""
--java-options "-Dcryptomator.mountPointsDir=\"@{userhome}/.local/share/Cryptomator/mnt\"" --java-options "-Dcryptomator.mountPointsDir=\"@{userhome}/.local/share/Cryptomator/mnt\""
--java-options "-Dcryptomator.showTrayIcon=false" --java-options "-Dcryptomator.showTrayIcon=true"
--java-options "-Dcryptomator.integrationsLinux.trayIconsDir=\"@{appdir}/usr/share/icons/hicolor/symbolic/apps\""
--java-options "-Dcryptomator.buildNumber=\"appimage-${{ needs.get-version.outputs.revNum }}\"" --java-options "-Dcryptomator.buildNumber=\"appimage-${{ needs.get-version.outputs.revNum }}\""
--add-launcher Cryptomator-gtk2=launcher-gtk2.properties --add-launcher Cryptomator-gtk2=launcher-gtk2.properties
--resource-dir dist/linux/resources --resource-dir dist/linux/resources
@@ -103,6 +105,10 @@ jobs:
cp dist/linux/common/org.cryptomator.Cryptomator256.png Cryptomator.AppDir/usr/share/icons/hicolor/256x256/apps/org.cryptomator.Cryptomator.png cp dist/linux/common/org.cryptomator.Cryptomator256.png Cryptomator.AppDir/usr/share/icons/hicolor/256x256/apps/org.cryptomator.Cryptomator.png
cp dist/linux/common/org.cryptomator.Cryptomator512.png Cryptomator.AppDir/usr/share/icons/hicolor/512x512/apps/org.cryptomator.Cryptomator.png cp dist/linux/common/org.cryptomator.Cryptomator512.png Cryptomator.AppDir/usr/share/icons/hicolor/512x512/apps/org.cryptomator.Cryptomator.png
cp dist/linux/common/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg cp dist/linux/common/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg
cp dist/linux/common/org.cryptomator.Cryptomator.tray.svg Cryptomator.AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.tray.svg
cp dist/linux/common/org.cryptomator.Cryptomator.tray-unlocked.svg Cryptomator.AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.tray-unlocked.svg
cp dist/linux/common/org.cryptomator.Cryptomator.tray.svg Cryptomator.AppDir/usr/share/icons/hicolor/symbolic/apps/org.cryptomator.Cryptomator.tray-symbolic.svg
cp dist/linux/common/org.cryptomator.Cryptomator.tray-unlocked.svg Cryptomator.AppDir/usr/share/icons/hicolor/symbolic/apps/org.cryptomator.Cryptomator.tray-unlocked-symbolic.svg
cp dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml Cryptomator.AppDir/usr/share/metainfo/org.cryptomator.Cryptomator.metainfo.xml cp dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml Cryptomator.AppDir/usr/share/metainfo/org.cryptomator.Cryptomator.metainfo.xml
cp dist/linux/common/org.cryptomator.Cryptomator.desktop Cryptomator.AppDir/usr/share/applications/org.cryptomator.Cryptomator.desktop cp dist/linux/common/org.cryptomator.Cryptomator.desktop Cryptomator.AppDir/usr/share/applications/org.cryptomator.Cryptomator.desktop
cp dist/linux/common/application-vnd.cryptomator.vault.xml Cryptomator.AppDir/usr/share/mime/packages/application-vnd.cryptomator.vault.xml cp dist/linux/common/application-vnd.cryptomator.vault.xml Cryptomator.AppDir/usr/share/mime/packages/application-vnd.cryptomator.vault.xml
+3 -2
View File
@@ -17,8 +17,8 @@ on:
env: env:
JAVA_VERSION: 20 JAVA_VERSION: 20
OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/20.0.1/openjfx-20.0.1_linux-x64_bin-jmods.zip' OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_linux-x64_bin-jmods.zip'
OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/20.0.1/openjfx-20.0.1_linux-aarch64_bin-jmods.zip' OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_linux-aarch64_bin-jmods.zip'
jobs: jobs:
build: build:
@@ -45,6 +45,7 @@ jobs:
with: with:
distribution: 'zulu' distribution: 'zulu'
java-version: ${{ env.JAVA_VERSION }} java-version: ${{ env.JAVA_VERSION }}
check-latest: true
cache: 'maven' cache: 'maven'
- name: Run maven - name: Run maven
run: mvn -B clean package -Pdependency-check,linux -DskipTests run: mvn -B clean package -Pdependency-check,linux -DskipTests
+32 -12
View File
@@ -8,6 +8,11 @@ on:
version: version:
description: 'Version' description: 'Version'
required: false required: false
notarize:
description: 'Notarize'
required: true
default: false
type: boolean
env: env:
JAVA_VERSION: 20 JAVA_VERSION: 20
@@ -31,31 +36,46 @@ jobs:
output-suffix: x64 output-suffix: x64
xcode-path: '/Applications/Xcode_13.2.1.app' xcode-path: '/Applications/Xcode_13.2.1.app'
fuse-lib: macFUSE fuse-lib: macFUSE
openjfx-url: https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_osx-x64_bin-jmods.zip
openjfx-sha: 55b8ff7453d59c89ae129f6c9c5ad7b09a5d359568811b376ac1766c14d6a17c
- os: [self-hosted, macOS, ARM64] - os: [self-hosted, macOS, ARM64]
architecture: aarch64 architecture: aarch64
output-suffix: arm64 output-suffix: arm64
xcode-path: '/Applications/Xcode_13.2.1.app' xcode-path: '/Applications/Xcode_13.2.1.app'
fuse-lib: FUSE-T fuse-lib: FUSE-T
openjfx-url: https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_osx-aarch64_bin-jmods.zip
openjfx-sha: c60f5f19aa847e0e620e0b011e5de68f2c6755641c2141cec27a0b89f612beaf
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Setup Java - name: Setup Java
uses: actions/setup-java@v3 uses: actions/setup-java@v3
with: with:
distribution: 'zulu' distribution: 'temurin'
java-version: ${{ env.JAVA_VERSION }} java-version: ${{ env.JAVA_VERSION }}
java-package: 'jdk+fx' java-package: 'jdk'
architecture: ${{ matrix.architecture }} architecture: ${{ matrix.architecture }}
check-latest: true
cache: 'maven' cache: 'maven'
- name: Ensure major jfx version in pom equals in jdk - name: Download OpenJFX jmods
if: ${{ !contains(matrix.os, 'self-hosted') }} id: download-jmods
shell: pwsh
run: | run: |
$jfxPomVersion = (&mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout) -split "\." curl -L ${{ matrix.openjfx-url }} -o openjfx-jmods.zip
$jfxJdkVersion = ((Get-Content -path "${env:JAVA_HOME}/lib/javafx.properties" | Where-Object {$_ -like 'javafx.version=*' }) -replace '.*=','') -split "\." echo "${{ matrix.openjfx-sha }} *openjfx-jmods.zip" | shasum -a256 --check
if ($jfxPomVersion[0] -ne $jfxJdkVersion[0]) { mkdir -p openjfx-jmods/
Write-Error "Major part of JavaFX version in pom($($jfxPomVersion[0])) does not match the version in JDK($($jfxJdkVersion[0])) " unzip -j openjfx-jmods.zip \*/javafx.base.jmod \*/javafx.controls.jmod \*/javafx.fxml.jmod \*/javafx.graphics.jmod -d openjfx-jmods
- name: Ensure major jfx version in pom and in jmods is the same
run: |
JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
JMOD_VERSION=${JMOD_VERSION#*@}
JMOD_VERSION=${JMOD_VERSION%%.*}
POM_JFX_VERSION=$(mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
if [ $POM_JFX_VERSION -ne $JMOD_VERSION ]; then
>&2 echo "Major JavaFX version in pom.xml (${POM_JFX_VERSION}) != jmod version (${JMOD_VERSION_AMD64})"
exit 1 exit 1
} fi
- name: Set version - name: Set version
run : mvn versions:set -DnewVersion=${{ needs.get-version.outputs.semVerStr }} run : mvn versions:set -DnewVersion=${{ needs.get-version.outputs.semVerStr }}
- name: Run maven - name: Run maven
@@ -69,7 +89,7 @@ jobs:
${JAVA_HOME}/bin/jlink ${JAVA_HOME}/bin/jlink
--verbose --verbose
--output runtime --output runtime
--module-path "${JAVA_HOME}/jmods" --module-path "${JAVA_HOME}/jmods:openjfx-jmods"
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr
--strip-native-commands --strip-native-commands
--no-header-files --no-header-files
@@ -208,7 +228,7 @@ jobs:
env: env:
VERSION_NO: ${{ needs.get-version.outputs.semVerNum }} VERSION_NO: ${{ needs.get-version.outputs.semVerNum }}
- name: Notarize .dmg - name: Notarize .dmg
if: startsWith(github.ref, 'refs/tags/') if: startsWith(github.ref, 'refs/tags/') || inputs.notarize
uses: cocoalibs/xcode-notarization-action@v1 uses: cocoalibs/xcode-notarization-action@v1
with: with:
app-path: 'Cryptomator-*.dmg' app-path: 'Cryptomator-*.dmg'
+1 -1
View File
@@ -18,7 +18,7 @@ jobs:
name: Validate commits pushed to release/hotfix branch to fulfill release requirements name: Validate commits pushed to release/hotfix branch to fulfill release requirements
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- id: validate-pom-version - id: validate-pom-version
name: Validate POM version name: Validate POM version
run: | run: |
+8 -6
View File
@@ -10,15 +10,15 @@ on:
required: false required: false
isDebug: isDebug:
description: 'Build debug version with console output' description: 'Build debug version with console output'
type: boolean type: boolean
env: env:
JAVA_VERSION: 20 JAVA_VERSION: 20
JAVA_DIST: 'temurin' JAVA_DIST: 'temurin'
JAVA_CACHE: 'maven' JAVA_CACHE: 'maven'
JFX_JMODS_URL: 'https://download2.gluonhq.com/openjfx/20.0.1/openjfx-20.0.1_windows-x64_bin-jmods.zip' JFX_JMODS_URL: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_windows-x64_bin-jmods.zip'
JFX_JMODS_HASH: 'D00767334C43B8832B5CF10267D34CA8F563D187C4655B73EB6020DD79C054B5' JFX_JMODS_HASH: '18625bbc13c57dbf802486564247a8d8cab72ec558c240a401bf6440384ebd77'
defaults: defaults:
run: run:
@@ -45,12 +45,13 @@ jobs:
distribution: ${{ env.JAVA_DIST }} distribution: ${{ env.JAVA_DIST }}
java-version: ${{ env.JAVA_VERSION }} java-version: ${{ env.JAVA_VERSION }}
java-package: 'jdk' java-package: 'jdk'
check-latest: true
cache: ${{ env.JAVA_CACHE }} cache: ${{ env.JAVA_CACHE }}
- name: Download and extract JavaFX jmods from Gluon - name: Download and extract JavaFX jmods from Gluon
#In the last step we move all jmods files a dir level up because jmods are placed inside a directory in the zip #In the last step we move all jmods files a dir level up because jmods are placed inside a directory in the zip
run: | run: |
curl --output jfxjmods.zip -L "${{ env.JFX_JMODS_URL }}" curl --output jfxjmods.zip -L "${{ env.JFX_JMODS_URL }}"
if(!(Get-FileHash -Path jfxjmods.zip -Algorithm SHA256).Hash.equals("${{ env.JFX_JMODS_HASH }}")) { if(!(Get-FileHash -Path jfxjmods.zip -Algorithm SHA256).Hash.ToLower().equals("${{ env.JFX_JMODS_HASH }}")) {
throw "Wrong checksum of JMOD archive downloaded from ${{ env.JFX_JMODS_URL }}."; throw "Wrong checksum of JMOD archive downloaded from ${{ env.JFX_JMODS_URL }}.";
} }
Expand-Archive -Path jfxjmods.zip -DestinationPath jfxjmods Expand-Archive -Path jfxjmods.zip -DestinationPath jfxjmods
@@ -247,6 +248,7 @@ jobs:
with: with:
distribution: ${{ env.JAVA_DIST }} distribution: ${{ env.JAVA_DIST }}
java-version: ${{ env.JAVA_VERSION }} java-version: ${{ env.JAVA_VERSION }}
check-latest: true
cache: ${{ env.JAVA_CACHE }} cache: ${{ env.JAVA_CACHE }}
- name: Generate license for exe - name: Generate license for exe
run: > run: >
@@ -359,7 +361,7 @@ jobs:
cp msi/*.msi files cp msi/*.msi files
cp exe/*.exe files cp exe/*.exe files
- name: Upload to Kaspersky - name: Upload to Kaspersky
uses: SamKirkland/FTP-Deploy-Action@4.3.3 uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with: with:
protocol: ftps protocol: ftps
server: allowlist.kaspersky-labs.com server: allowlist.kaspersky-labs.com
@@ -368,7 +370,7 @@ jobs:
password: ${{ secrets.ALLOWLIST_KASPERSKY_PASSWORD }} password: ${{ secrets.ALLOWLIST_KASPERSKY_PASSWORD }}
local-dir: files/ local-dir: files/
- name: Upload to Avast - name: Upload to Avast
uses: SamKirkland/FTP-Deploy-Action@4.3.0 uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with: with:
protocol: ftp protocol: ftp
server: whitelisting.avast.com server: whitelisting.avast.com
+1 -1
View File
@@ -2,7 +2,7 @@
<configuration default="false" name="Cryptomator Linux" type="Application" factoryName="Application"> <configuration default="false" name="Cryptomator Linux" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" /> <option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
<module name="cryptomator" /> <module name="cryptomator" />
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath=&quot;@{userhome}/.config/Cryptomator/settings.json&quot; -Dcryptomator.p12Path=&quot;@{userhome}/.config/Cryptomator/key.p12&quot; -Dcryptomator.ipcSocketPath=&quot;@{userhome}/.config/Cryptomator/ipc.socket&quot; -Dcryptomator.logDir=&quot;@{userhome}/.local/share/Cryptomator/logs&quot; -Dcryptomator.pluginDir=&quot;@{userhome}/.local/share/Cryptomator/plugins&quot; -Dcryptomator.mountPointsDir=&quot;@{userhome}/.local/share/Cryptomator/mnt&quot; -Dcryptomator.showTrayIcon=true -Xss20m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64" /> <option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath=&quot;@{userhome}/.config/Cryptomator/settings.json&quot; -Dcryptomator.p12Path=&quot;@{userhome}/.config/Cryptomator/key.p12&quot; -Dcryptomator.ipcSocketPath=&quot;@{userhome}/.config/Cryptomator/ipc.socket&quot; -Dcryptomator.logDir=&quot;@{userhome}/.local/share/Cryptomator/logs&quot; -Dcryptomator.pluginDir=&quot;@{userhome}/.local/share/Cryptomator/plugins&quot; -Dcryptomator.mountPointsDir=&quot;@{userhome}/.local/share/Cryptomator/mnt&quot; -Dcryptomator.showTrayIcon=true -Xss20m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator" />
<method v="2"> <method v="2">
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
+1 -1
View File
@@ -2,7 +2,7 @@
<configuration default="false" name="Cryptomator Linux Dev" type="Application" factoryName="Application"> <configuration default="false" name="Cryptomator Linux Dev" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" /> <option name="MAIN_CLASS_NAME" value="org.cryptomator.launcher.Cryptomator" />
<module name="cryptomator" /> <module name="cryptomator" />
<option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath=&quot;@{userhome}/.config/Cryptomator-Dev/settings.json&quot; -Dcryptomator.p12Path=&quot;@{userhome}/.config/Cryptomator-Dev/key.p12&quot; -Dcryptomator.ipcSocketPath=&quot;@{userhome}/.config/Cryptomator-Dev/ipc.socket&quot; -Dcryptomator.logDir=&quot;@{userhome}/.local/share/Cryptomator-Dev/logs&quot; -Dcryptomator.pluginDir=&quot;@{userhome}/.local/share/Cryptomator-Dev/plugins&quot; -Dcryptomator.mountPointsDir=&quot;@{userhome}/.local/share/Cryptomator-Dev/mnt&quot; -Dcryptomator.showTrayIcon=true -Dfuse.experimental=&quot;true&quot; -Xss20m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64" /> <option name="VM_PARAMETERS" value="-Dcryptomator.settingsPath=&quot;@{userhome}/.config/Cryptomator-Dev/settings.json&quot; -Dcryptomator.p12Path=&quot;@{userhome}/.config/Cryptomator-Dev/key.p12&quot; -Dcryptomator.ipcSocketPath=&quot;@{userhome}/.config/Cryptomator-Dev/ipc.socket&quot; -Dcryptomator.logDir=&quot;@{userhome}/.local/share/Cryptomator-Dev/logs&quot; -Dcryptomator.pluginDir=&quot;@{userhome}/.local/share/Cryptomator-Dev/plugins&quot; -Dcryptomator.mountPointsDir=&quot;@{userhome}/.local/share/Cryptomator-Dev/mnt&quot; -Dcryptomator.showTrayIcon=true -Dfuse.experimental=&quot;true&quot; -Xss20m -Xmx512m --enable-preview --enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator" />
<method v="2"> <method v="2">
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
+8 -4
View File
@@ -16,7 +16,6 @@ mvn -f ../../../pom.xml versions:set -DnewVersion=${SEMVER_STR}
# compile # compile
mvn -B -f ../../../pom.xml clean package -Plinux -DskipTests mvn -B -f ../../../pom.xml clean package -Plinux -DskipTests
cp ../../../LICENSE.txt ../../../target cp ../../../LICENSE.txt ../../../target
cp ../launcher.sh ../../../target
cp ../../../target/cryptomator-*.jar ../../../target/mods cp ../../../target/cryptomator-*.jar ../../../target/mods
# add runtime # add runtime
@@ -24,7 +23,7 @@ ${JAVA_HOME}/bin/jlink \
--verbose \ --verbose \
--output runtime \ --output runtime \
--module-path "${JAVA_HOME}/jmods" \ --module-path "${JAVA_HOME}/jmods" \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr \ --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net \
--strip-native-commands \ --strip-native-commands \
--no-header-files \ --no-header-files \
--no-man-pages \ --no-man-pages \
@@ -44,7 +43,7 @@ ${JAVA_HOME}/bin/jpackage \
--name Cryptomator \ --name Cryptomator \
--vendor "Skymatic GmbH" \ --vendor "Skymatic GmbH" \
--java-options "--enable-preview" \ --java-options "--enable-preview" \
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64" \ --java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator" \
--copyright "(C) 2016 - 2023 Skymatic GmbH" \ --copyright "(C) 2016 - 2023 Skymatic GmbH" \
--java-options "-Xss5m" \ --java-options "-Xss5m" \
--java-options "-Xmx256m" \ --java-options "-Xmx256m" \
@@ -57,7 +56,8 @@ ${JAVA_HOME}/bin/jpackage \
--java-options "-Dcryptomator.p12Path=\"@{userhome}/.config/Cryptomator/key.p12\"" \ --java-options "-Dcryptomator.p12Path=\"@{userhome}/.config/Cryptomator/key.p12\"" \
--java-options "-Dcryptomator.ipcSocketPath=\"@{userhome}/.config/Cryptomator/ipc.socket\"" \ --java-options "-Dcryptomator.ipcSocketPath=\"@{userhome}/.config/Cryptomator/ipc.socket\"" \
--java-options "-Dcryptomator.mountPointsDir=\"@{userhome}/.local/share/Cryptomator/mnt\"" \ --java-options "-Dcryptomator.mountPointsDir=\"@{userhome}/.local/share/Cryptomator/mnt\"" \
--java-options "-Dcryptomator.showTrayIcon=false" \ --java-options "-Dcryptomator.showTrayIcon=true" \
--java-options "-Dcryptomator.integrationsLinux.trayIconsDir=\"@{appdir}/usr/share/icons/hicolor/symbolic/apps\"" \
--java-options "-Dcryptomator.buildNumber=\"appimage-${REVISION_NO}\"" \ --java-options "-Dcryptomator.buildNumber=\"appimage-${REVISION_NO}\"" \
--add-launcher cryptomator-gtk2=launcher-gtk2.properties \ --add-launcher cryptomator-gtk2=launcher-gtk2.properties \
--resource-dir ../resources --resource-dir ../resources
@@ -69,6 +69,10 @@ envsubst '${REVISION_NO}' < resources/AppDir/bin/cryptomator.sh > Cryptomator.Ap
cp ../common/org.cryptomator.Cryptomator256.png Cryptomator.AppDir/usr/share/icons/hicolor/256x256/apps/org.cryptomator.Cryptomator.png cp ../common/org.cryptomator.Cryptomator256.png Cryptomator.AppDir/usr/share/icons/hicolor/256x256/apps/org.cryptomator.Cryptomator.png
cp ../common/org.cryptomator.Cryptomator512.png Cryptomator.AppDir/usr/share/icons/hicolor/512x512/apps/org.cryptomator.Cryptomator.png cp ../common/org.cryptomator.Cryptomator512.png Cryptomator.AppDir/usr/share/icons/hicolor/512x512/apps/org.cryptomator.Cryptomator.png
cp ../common/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg cp ../common/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg
cp ../common/org.cryptomator.Cryptomator.tray.svg Cryptomator.AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.tray.svg
cp ../common/org.cryptomator.Cryptomator.tray-unlocked.svg Cryptomator.AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.tray-unlocked.svg
cp ../common/org.cryptomator.Cryptomator.tray.svg Cryptomator.AppDir/usr/share/icons/hicolor/symbolic/apps/org.cryptomator.Cryptomator.tray-symbolic.svg
cp ../common/org.cryptomator.Cryptomator.tray-unlocked.svg Cryptomator.AppDir/usr/share/icons/hicolor/symbolic/apps/org.cryptomator.Cryptomator.tray-unlocked-symbolic.svg
cp ../common/org.cryptomator.Cryptomator.desktop Cryptomator.AppDir/usr/share/applications/org.cryptomator.Cryptomator.desktop cp ../common/org.cryptomator.Cryptomator.desktop Cryptomator.AppDir/usr/share/applications/org.cryptomator.Cryptomator.desktop
cp ../common/org.cryptomator.Cryptomator.metainfo.xml Cryptomator.AppDir/usr/share/metainfo/org.cryptomator.Cryptomator.metainfo.xml cp ../common/org.cryptomator.Cryptomator.metainfo.xml Cryptomator.AppDir/usr/share/metainfo/org.cryptomator.Cryptomator.metainfo.xml
cp ../common/application-vnd.cryptomator.vault.xml Cryptomator.AppDir/usr/share/mime/packages/application-vnd.cryptomator.vault.xml cp ../common/application-vnd.cryptomator.vault.xml Cryptomator.AppDir/usr/share/mime/packages/application-vnd.cryptomator.vault.xml
@@ -66,6 +66,9 @@
</content_rating> </content_rating>
<releases> <releases>
<release date="2023-08-11" version="1.9.4"/>
<release date="2023-08-07" version="1.9.3"/>
<release date="2023-07-24" version="1.9.2"/>
<release date="2023-06-07" version="1.9.1"/> <release date="2023-06-07" version="1.9.1"/>
<release date="2023-05-30" version="1.9.0"/> <release date="2023-05-30" version="1.9.0"/>
<release date="2023-04-25" version="1.8.0"/> <release date="2023-04-25" version="1.8.0"/>
@@ -0,0 +1,12 @@
<svg height="16" viewBox="0 0 42 42" width="16" xmlns="http://www.w3.org/2000/svg">
<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>

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -0,0 +1,8 @@
<svg height="16" viewBox="0 0 42 42" width="16" xmlns="http://www.w3.org/2000/svg">
<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>

After

Width:  |  Height:  |  Size: 3.0 KiB

+2
View File
@@ -1,6 +1,8 @@
cryptomator usr/lib cryptomator usr/lib
common/org.cryptomator.Cryptomator.desktop usr/share/applications common/org.cryptomator.Cryptomator.desktop usr/share/applications
common/org.cryptomator.Cryptomator.svg usr/share/icons/hicolor/scalable/apps common/org.cryptomator.Cryptomator.svg usr/share/icons/hicolor/scalable/apps
common/org.cryptomator.Cryptomator.tray.svg usr/share/icons/hicolor/scalable/apps
common/org.cryptomator.Cryptomator.tray-unlocked.svg usr/share/icons/hicolor/scalable/apps
common/org.cryptomator.Cryptomator256.png usr/share/icons/hicolor/256x256/apps common/org.cryptomator.Cryptomator256.png usr/share/icons/hicolor/256x256/apps
common/org.cryptomator.Cryptomator512.png usr/share/icons/hicolor/512x512/apps common/org.cryptomator.Cryptomator512.png usr/share/icons/hicolor/512x512/apps
common/org.cryptomator.Cryptomator.metainfo.xml usr/share/metainfo common/org.cryptomator.Cryptomator.metainfo.xml usr/share/metainfo
+2
View File
@@ -1 +1,3 @@
usr/lib/cryptomator/bin/cryptomator usr/bin/cryptomator usr/lib/cryptomator/bin/cryptomator usr/bin/cryptomator
usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.tray.svg usr/share/icons/hicolor/symbolic/apps/org.cryptomator.Cryptomator.tray-symbolic.svg
usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.tray-unlocked.svg usr/share/icons/hicolor/symbolic/apps/org.cryptomator.Cryptomator.tray-unlocked-symbolic.svg
+4 -3
View File
@@ -27,7 +27,7 @@ override_dh_auto_build:
$(JAVA_HOME)/bin/jlink \ $(JAVA_HOME)/bin/jlink \
--output runtime \ --output runtime \
--module-path "${JMODS_PATH}" \ --module-path "${JMODS_PATH}" \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr \ --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.net \
--strip-native-commands \ --strip-native-commands \
--no-header-files \ --no-header-files \
--no-man-pages \ --no-man-pages \
@@ -43,7 +43,7 @@ override_dh_auto_build:
--name cryptomator \ --name cryptomator \
--vendor "Skymatic GmbH" \ --vendor "Skymatic GmbH" \
--java-options "--enable-preview" \ --java-options "--enable-preview" \
--java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64" \ --java-options "--enable-native-access=org.cryptomator.jfuse.linux.amd64,org.cryptomator.jfuse.linux.aarch64,org.purejava.appindicator" \
--copyright "(C) 2016 - 2023 Skymatic GmbH" \ --copyright "(C) 2016 - 2023 Skymatic GmbH" \
--java-options "-Xss5m" \ --java-options "-Xss5m" \
--java-options "-Xmx256m" \ --java-options "-Xmx256m" \
@@ -55,7 +55,8 @@ override_dh_auto_build:
--java-options "-Dcryptomator.p12Path=\"@{userhome}/.config/Cryptomator/key.p12\"" \ --java-options "-Dcryptomator.p12Path=\"@{userhome}/.config/Cryptomator/key.p12\"" \
--java-options "-Dcryptomator.ipcSocketPath=\"@{userhome}/.config/Cryptomator/ipc.socket\"" \ --java-options "-Dcryptomator.ipcSocketPath=\"@{userhome}/.config/Cryptomator/ipc.socket\"" \
--java-options "-Dcryptomator.mountPointsDir=\"@{userhome}/.local/share/Cryptomator/mnt\"" \ --java-options "-Dcryptomator.mountPointsDir=\"@{userhome}/.local/share/Cryptomator/mnt\"" \
--java-options "-Dcryptomator.showTrayIcon=false" \ --java-options "-Dcryptomator.showTrayIcon=true" \
--java-options "-Dcryptomator.integrationsLinux.trayIconsDir=\"/usr/share/icons/hicolor/symbolic/apps\"" \
--java-options "-Dcryptomator.buildNumber=\"deb-${REVISION_NUM}\"" \ --java-options "-Dcryptomator.buildNumber=\"deb-${REVISION_NUM}\"" \
--java-options "-Dcryptomator.appVersion=\"${SEMVER_STR}\"" \ --java-options "-Dcryptomator.appVersion=\"${SEMVER_STR}\"" \
--app-version "${VERSION_NUM}.${REVISION_NUM}" \ --app-version "${VERSION_NUM}.${REVISION_NUM}" \
+26 -2
View File
@@ -29,6 +29,14 @@ REVISION_NO=`git rev-list --count HEAD`
VERSION_NO=`mvn -f../../../pom.xml help:evaluate -Dexpression=project.version -q -DforceStdout | sed -rn 's/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/p'` VERSION_NO=`mvn -f../../../pom.xml help:evaluate -Dexpression=project.version -q -DforceStdout | sed -rn 's/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/p'`
FUSE_LIB="FUSE-T" FUSE_LIB="FUSE-T"
ARCH="undefined"
if [ "$(machine)" = "arm64e" ]; then
ARCH="aarch64"
else
ARCH="x64"
fi
OPENJFX_JMODS="https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_osx-${ARCH}_bin-jmods.zip"
# check preconditions # check preconditions
if [ -z "${JAVA_HOME}" ]; then echo "JAVA_HOME not set. Run using JAVA_HOME=/path/to/jdk ./build.sh"; exit 1; fi if [ -z "${JAVA_HOME}" ]; then echo "JAVA_HOME not set. Run using JAVA_HOME=/path/to/jdk ./build.sh"; exit 1; fi
command -v mvn >/dev/null 2>&1 || { echo >&2 "mvn not found. Fix by 'brew install maven'."; exit 1; } command -v mvn >/dev/null 2>&1 || { echo >&2 "mvn not found. Fix by 'brew install maven'."; exit 1; }
@@ -38,6 +46,22 @@ if [ -n "${CODESIGN_IDENTITY}" ]; then
if [[ ! `security find-identity -v -p codesigning | grep -w "${CODESIGN_IDENTITY}"` ]]; then echo "Given codesign identity is invalid."; exit 1; fi if [[ ! `security find-identity -v -p codesigning | grep -w "${CODESIGN_IDENTITY}"` ]]; then echo "Given codesign identity is invalid."; exit 1; fi
fi fi
# download and check jmods
curl -L ${OPENJFX_JMODS} -o openjfx-jmods.zip
mkdir -p openjfx-jmods/
unzip -j openjfx-jmods.zip \*/javafx.base.jmod \*/javafx.controls.jmod \*/javafx.fxml.jmod \*/javafx.graphics.jmod -d openjfx-jmods/
JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1)
JMOD_VERSION=${JMOD_VERSION#*@}
JMOD_VERSION=${JMOD_VERSION%%.*}
POM_JFX_VERSION=$(mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout)
POM_JFX_VERSION=${POM_JFX_VERSION#*@}
POM_JFX_VERSION=${POM_JFX_VERSION%%.*}
if [ $POM_JFX_VERSION -ne $JMOD_VERSION ]; then
>&2 echo "Major JavaFX version in pom.xml (${POM_JFX_VERSION}) != jmod version (${JMOD_VERSION})"
exit 1
fi
# compile # compile
mvn -B -f../../../pom.xml clean package -DskipTests -Pmac mvn -B -f../../../pom.xml clean package -DskipTests -Pmac
cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods
@@ -45,8 +69,8 @@ cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods
# add runtime # add runtime
${JAVA_HOME}/bin/jlink \ ${JAVA_HOME}/bin/jlink \
--output runtime \ --output runtime \
--module-path "${JAVA_HOME}/jmods" \ --module-path "${JAVA_HOME}/jmods:openjfx-jmods" \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr \ --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr \
--strip-native-commands \ --strip-native-commands \
--no-header-files \ --no-header-files \
--no-man-pages \ --no-man-pages \
Binary file not shown.
+1 -1
View File
@@ -11,7 +11,7 @@ SET HELP_URL="https://cryptomator.org/contact/"
SET MODULE_AND_MAIN_CLASS="org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator" SET MODULE_AND_MAIN_CLASS="org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator"
SET LOOPBACK_ALIAS="cryptomator-vault" SET LOOPBACK_ALIAS="cryptomator-vault"
powershell -NoLogo -ExecutionPolicy Unrestricted -Command .\build.ps1^ powershell -NoLogo -NoProfile -ExecutionPolicy Unrestricted -Command .\build.ps1^
-AppName %APPNAME%^ -AppName %APPNAME%^
-MainJarGlob "%MAIN_JAR_GLOB%"^ -MainJarGlob "%MAIN_JAR_GLOB%"^
-ModuleAndMainClass "%MODULE_AND_MAIN_CLASS%"^ -ModuleAndMainClass "%MODULE_AND_MAIN_CLASS%"^
+5 -3
View File
@@ -51,10 +51,11 @@ if ($clean -and (Test-Path -Path $runtimeImagePath)) {
} }
## download jfx jmods ## download jfx jmods
$jfxJmodsChecksum = 'd00767334c43b8832b5cf10267d34ca8f563d187c4655b73eb6020dd79c054b5' $jmodsVersion='20.0.2'
$jmodsUrl = "https://download2.gluonhq.com/openjfx/${jmodsVersion}/openjfx-${jmodsVersion}_windows-x64_bin-jmods.zip"
$jfxJmodsChecksum = '18625bbc13c57dbf802486564247a8d8cab72ec558c240a401bf6440384ebd77'
$jfxJmodsZip = '.\resources\jfxJmods.zip' $jfxJmodsZip = '.\resources\jfxJmods.zip'
if( !(Test-Path -Path $jfxJmodsZip) ) { if( !(Test-Path -Path $jfxJmodsZip) ) {
$jmodsUrl = "https://download2.gluonhq.com/openjfx/20.0.1/openjfx-20.0.1_windows-x64_bin-jmods.zip"
Write-Output "Downloading ${jmodsUrl}..." Write-Output "Downloading ${jmodsUrl}..."
Invoke-WebRequest $jmodsUrl -OutFile $jfxJmodsZip # redirects are followed by default Invoke-WebRequest $jmodsUrl -OutFile $jfxJmodsZip # redirects are followed by default
} }
@@ -65,12 +66,13 @@ if( $jmodsChecksumActual -ne $jfxJmodsChecksum ) {
exit 1; exit 1;
} }
Expand-Archive -Force -Path $jfxJmodsZip -DestinationPath ".\resources\" Expand-Archive -Force -Path $jfxJmodsZip -DestinationPath ".\resources\"
Move-Item -Path ".\resources\javafx-jmods-*" -Destination ".\resources\javafx-jmods" -ErrorAction Stop
& "$Env:JAVA_HOME\bin\jlink" ` & "$Env:JAVA_HOME\bin\jlink" `
--verbose ` --verbose `
--output runtime ` --output runtime `
--module-path "$Env:JAVA_HOME/jmods;$buildDir/resources/javafx-jmods-20.0.1" ` --module-path "$Env:JAVA_HOME/jmods;$buildDir/resources/javafx-jmods" `
--add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr,javafx.base,javafx.graphics,javafx.controls,javafx.fxml ` --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr,javafx.base,javafx.graphics,javafx.controls,javafx.fxml `
--strip-native-commands ` --strip-native-commands `
--no-header-files ` --no-header-files `
+1 -1
View File
@@ -3,5 +3,5 @@
::REPLACE ME ::REPLACE ME
cd %~dp0 cd %~dp0
powershell -NoLogo -NonInteractive -ExecutionPolicy Unrestricted -Command .\patchWebDAV.ps1^ powershell -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned -Command .\patchWebDAV.ps1^
-LoopbackAlias %LOOPBACK_ALIAS% -LoopbackAlias %LOOPBACK_ALIAS%
+1 -1
View File
@@ -2,4 +2,4 @@
:: see comments in file ./version170-migrate-settings.ps1 :: see comments in file ./version170-migrate-settings.ps1
cd %~dp0 cd %~dp0
powershell -NoLogo -NonInteractive -ExecutionPolicy Unrestricted -Command .\version170-migrate-settings.ps1 powershell -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned -Command .\version170-migrate-settings.ps1
+8 -2
View File
@@ -132,11 +132,17 @@
<CustomAction Id="JpSetARPURLUPDATEINFO" Property="ARPURLUPDATEINFO" Value="$(var.JpUpdateURL)" /> <CustomAction Id="JpSetARPURLUPDATEINFO" Property="ARPURLUPDATEINFO" Value="$(var.JpUpdateURL)" />
<?endif?> <?endif?>
<Property Id="WixQuietExec64CmdTimeout" Value="20" />
<!-- Note for custom actions: Immediate CAs run BEFORE the files are installed, hence if you depend on installed files, the CAs must be deferred.-->
<!-- WebDAV patches --> <!-- WebDAV patches -->
<CustomAction Id="PatchWebDAV" Impersonate="no" ExeCommand="[INSTALLDIR]patchWebDAV.bat" Directory="INSTALLDIR" Execute="deferred" Return="asyncWait" /> <SetProperty Id="PatchWebDAV" Value="&quot;[INSTALLDIR]patchWebDAV.bat&quot;"
Sequence="execute" Before="PatchWebDAV" />
<CustomAction Id="PatchWebDAV" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
<!-- Special Settings migration for 1.7.0,. Should be removed eventually, for more info, see ../contrib/version170-migrate-settings.ps1--> <!-- Special Settings migration for 1.7.0,. Should be removed eventually, for more info, see ../contrib/version170-migrate-settings.ps1-->
<CustomAction Id="V170MigrateSettings" Impersonate="no" ExeCommand="[INSTALLDIR]version170-migrate-settings.bat" Directory="INSTALLDIR" Execute="deferred" Return="asyncWait" /> <SetProperty Id="V170MigrateSettings" Value="&quot;[INSTALLDIR]version170-migrate-settings.bat&quot;"
Sequence="execute" Before="V170MigrateSettings" />
<CustomAction Id="V170MigrateSettings" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="deferred" Return="ignore" Impersonate="no"/>
<!-- Running App detection and exit --> <!-- Running App detection and exit -->
<Property Id="FOUNDRUNNINGAPP" Admin="yes"/> <Property Id="FOUNDRUNNINGAPP" Admin="yes"/>
+48 -27
View File
@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>org.cryptomator</groupId> <groupId>org.cryptomator</groupId>
<artifactId>cryptomator</artifactId> <artifactId>cryptomator</artifactId>
<version>1.10.0-SNAPSHOT</version> <version>1.10.0</version>
<name>Cryptomator Desktop App</name> <name>Cryptomator Desktop App</name>
<organization> <organization>
@@ -29,42 +29,49 @@
<project.jdk.version>20</project.jdk.version> <project.jdk.version>20</project.jdk.version>
<!-- Group IDs of jars that need to stay on the class path for now --> <!-- Group IDs of jars that need to stay on the class path for now -->
<!-- Once hypfvieh, swiesend, purejava and integrations-linux have module-info, remove them--> <!-- remove them, as soon they got modularized or support is dropped (i.e., WebDAV) -->
<nonModularGroupIds>org.ow2.asm,org.apache.jackrabbit,org.apache.httpcomponents,de.swiesend,org.purejava,com.github.hypfvieh</nonModularGroupIds> <nonModularGroupIds>org.ow2.asm,org.apache.jackrabbit,org.apache.httpcomponents</nonModularGroupIds>
<!-- cryptomator dependencies --> <!-- cryptomator dependencies -->
<cryptomator.cryptofs.version>2.6.6</cryptomator.cryptofs.version> <cryptomator.cryptofs.version>2.6.7</cryptomator.cryptofs.version>
<cryptomator.integrations.version>1.2.0</cryptomator.integrations.version> <cryptomator.integrations.version>1.3.0</cryptomator.integrations.version>
<cryptomator.integrations.win.version>1.2.0</cryptomator.integrations.win.version> <cryptomator.integrations.win.version>1.2.2</cryptomator.integrations.win.version>
<cryptomator.integrations.mac.version>1.2.0</cryptomator.integrations.mac.version> <cryptomator.integrations.mac.version>1.2.1</cryptomator.integrations.mac.version>
<cryptomator.integrations.linux.version>1.2.1</cryptomator.integrations.linux.version> <cryptomator.integrations.linux.version>1.3.0-beta6</cryptomator.integrations.linux.version>
<cryptomator.fuse.version>3.0.0</cryptomator.fuse.version> <cryptomator.fuse.version>3.0.0</cryptomator.fuse.version>
<cryptomator.dokany.version>2.0.0</cryptomator.dokany.version> <cryptomator.dokany.version>2.0.0</cryptomator.dokany.version>
<cryptomator.webdav.version>2.0.3</cryptomator.webdav.version> <cryptomator.webdav.version>2.0.3</cryptomator.webdav.version>
<!-- 3rd party dependencies --> <!-- 3rd party dependencies -->
<commons-lang3.version>3.12.0</commons-lang3.version> <commons-lang3.version>3.13.0</commons-lang3.version>
<dagger.version>2.45</dagger.version> <dagger.version>2.47</dagger.version>
<easybind.version>2.2</easybind.version> <easybind.version>2.2</easybind.version>
<guava.version>32.0.1-jre</guava.version> <guava.version>32.1.2-jre</guava.version>
<jackson.version>2.15.2</jackson.version> <jackson.version>2.15.2</jackson.version>
<javafx.version>20.0.1</javafx.version> <javafx.version>20.0.2</javafx.version>
<jwt.version>4.4.0</jwt.version> <jwt.version>4.4.0</jwt.version>
<nimbus-jose.version>9.31</nimbus-jose.version> <nimbus-jose.version>9.31</nimbus-jose.version>
<logback.version>1.4.7</logback.version> <logback.version>1.4.11</logback.version>
<slf4j.version>2.0.7</slf4j.version> <slf4j.version>2.0.7</slf4j.version>
<tinyoauth2.version>0.5.1</tinyoauth2.version> <tinyoauth2.version>0.6.0</tinyoauth2.version>
<zxcvbn.version>1.7.0</zxcvbn.version> <zxcvbn.version>1.8.2</zxcvbn.version>
<!-- test dependencies --> <!-- test dependencies -->
<junit.jupiter.version>5.9.3</junit.jupiter.version> <junit.jupiter.version>5.10.0</junit.jupiter.version>
<mockito.version>5.3.1</mockito.version> <mockito.version>5.5.0</mockito.version>
<hamcrest.version>2.2</hamcrest.version> <hamcrest.version>2.2</hamcrest.version>
<!-- build-time dependencies --> <!-- build-time dependencies -->
<jetbrains.annotations.version>23.0.0</jetbrains.annotations.version> <jetbrains.annotations.version>24.0.1</jetbrains.annotations.version>
<dependency-check.version>8.1.2</dependency-check.version> <dependency-check.version>8.4.0</dependency-check.version>
<jacoco.version>0.8.9</jacoco.version> <jacoco.version>0.8.10</jacoco.version>
<license-generator.version>2.2.0</license-generator.version>
<junit-tree-reporter.version>1.2.1</junit-tree-reporter.version>
<mvn-compiler.version>3.11.0</mvn-compiler.version>
<mvn-resources.version>3.3.1</mvn-resources.version>
<mvn-dependency.version>3.6.0</mvn-dependency.version>
<mvn-surefire.version>3.1.2</mvn-surefire.version>
<mvn-jar.version>3.3.0</mvn-jar.version>
</properties> </properties>
<dependencies> <dependencies>
@@ -240,7 +247,7 @@
<dependency> <dependency>
<groupId>com.google.jimfs</groupId> <groupId>com.google.jimfs</groupId>
<artifactId>jimfs</artifactId> <artifactId>jimfs</artifactId>
<version>1.2</version> <version>1.3.0</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
@@ -258,32 +265,32 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version> <version>${mvn-compiler.version}</version>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId> <artifactId>maven-resources-plugin</artifactId>
<version>3.3.0</version> <version>${mvn-resources.version}</version>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId> <artifactId>maven-dependency-plugin</artifactId>
<version>3.3.0</version> <version>${mvn-dependency.version}</version>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M7</version> <version>${mvn-surefire.version}</version>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId> <artifactId>license-maven-plugin</artifactId>
<version>2.0.0</version> <version>${license-generator.version}</version>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId> <artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version> <version>${mvn-jar.version}</version>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.jacoco</groupId> <groupId>org.jacoco</groupId>
@@ -332,8 +339,22 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<dependencies>
<dependency>
<groupId>me.fabriciorby</groupId>
<artifactId>maven-surefire-junit5-tree-reporter</artifactId>
<version>${junit-tree-reporter.version}</version>
</dependency>
</dependencies>
<configuration> <configuration>
<argLine>--enable-preview</argLine> <argLine>--enable-preview</argLine>
<reportFormat>plain</reportFormat>
<consoleOutputReporter>
<disable>true</disable>
</consoleOutputReporter>
<statelessTestsetInfoReporter
implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5StatelessTestsetInfoTreeReporter">
</statelessTestsetInfoReporter>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>
@@ -83,8 +83,8 @@ public final class OneDriveWindowsLocationPresetsProvider implements LocationPre
throw new TimeoutException(cmdDescription + " timed out after " + timeoutSeconds + "s"); throw new TimeoutException(cmdDescription + " timed out after " + timeoutSeconds + "s");
} }
if (process.exitValue() != 0) { if (process.exitValue() != 0) {
@SuppressWarnings("resource") var stdout = process.inputReader(StandardCharsets.UTF_8).lines().collect(Collectors.joining("\n")); @SuppressWarnings("resource") var stdout = process.inputReader(StandardCharsets.ISO_8859_1).lines().collect(Collectors.joining("\n"));
@SuppressWarnings("resource") var stderr = process.errorReader(StandardCharsets.UTF_8).lines().collect(Collectors.joining("\n")); @SuppressWarnings("resource") var stderr = process.errorReader(StandardCharsets.ISO_8859_1).lines().collect(Collectors.joining("\n"));
throw new CommandFailedException(cmdDescription, process.exitValue(), stdout, stderr); throw new CommandFailedException(cmdDescription, process.exitValue(), stdout, stderr);
} }
} }
@@ -0,0 +1,17 @@
package org.cryptomator.common.mount;
import java.nio.file.Path;
public class HideawayNotDirectoryException extends IllegalMountPointException {
private final Path hideaway;
public HideawayNotDirectoryException(Path path, Path hideaway) {
super(path, "Existing hideaway (" + hideaway.toString() + ") for mountpoint is not a directory: " + path.toString());
this.hideaway = hideaway;
}
public Path getHideaway() {
return hideaway;
}
}
@@ -1,9 +1,25 @@
package org.cryptomator.common.mount; package org.cryptomator.common.mount;
import java.nio.file.Path;
/**
* Indicates that validation or preparation of a mountpoint failed due to a configuration error or an invalid system state.<br>
* Instances of this exception are usually caught and displayed to the user in an appropriate fashion, e.g. by {@link org.cryptomator.ui.unlock.UnlockInvalidMountPointController UnlockInvalidMountPointController.}
*/
public class IllegalMountPointException extends IllegalArgumentException { public class IllegalMountPointException extends IllegalArgumentException {
public IllegalMountPointException(String msg) { private final Path mountpoint;
super(msg);
public IllegalMountPointException(Path mountpoint) {
this(mountpoint, "The provided mountpoint has a problem: " + mountpoint.toString());
} }
} public IllegalMountPointException(Path mountpoint, String msg) {
super(msg);
this.mountpoint = mountpoint;
}
public Path getMountpoint() {
return mountpoint;
}
}
@@ -0,0 +1,10 @@
package org.cryptomator.common.mount;
import java.nio.file.Path;
public class MountPointCleanupFailedException extends IllegalMountPointException {
public MountPointCleanupFailedException(Path path) {
super(path, "Mountpoint could not be cleared: " + path.toString());
}
}
@@ -1,8 +1,10 @@
package org.cryptomator.common.mount; package org.cryptomator.common.mount;
import java.nio.file.Path;
public class MountPointInUseException extends IllegalMountPointException { public class MountPointInUseException extends IllegalMountPointException {
public MountPointInUseException(String msg) { public MountPointInUseException(Path path) {
super(msg); super(path);
} }
} }
@@ -0,0 +1,10 @@
package org.cryptomator.common.mount;
import java.nio.file.Path;
public class MountPointNotEmptyDirectoryException extends IllegalMountPointException {
public MountPointNotEmptyDirectoryException(Path path, String msg) {
super(path, msg);
}
}
@@ -0,0 +1,14 @@
package org.cryptomator.common.mount;
import java.nio.file.Path;
public class MountPointNotExistingException extends IllegalMountPointException {
public MountPointNotExistingException(Path path, String msg) {
super(path, msg);
}
public MountPointNotExistingException(Path path) {
super(path, "Mountpoint does not exist: " + path);
}
}
@@ -1,8 +0,0 @@
package org.cryptomator.common.mount;
public class MountPointNotExistsException extends IllegalMountPointException {
public MountPointNotExistsException(String msg) {
super(msg);
}
}
@@ -1,8 +1,10 @@
package org.cryptomator.common.mount; package org.cryptomator.common.mount;
import java.nio.file.Path;
public class MountPointNotSupportedException extends IllegalMountPointException { public class MountPointNotSupportedException extends IllegalMountPointException {
public MountPointNotSupportedException(String msg) { public MountPointNotSupportedException(Path path, String msg) {
super(msg); super(path, msg);
} }
} }
@@ -1,12 +0,0 @@
package org.cryptomator.common.mount;
public class MountPointPreparationException extends RuntimeException {
public MountPointPreparationException(String msg) {
super(msg);
}
public MountPointPreparationException(Throwable cause) {
super(cause);
}
}
@@ -5,13 +5,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.IOException;
import java.nio.file.DirectoryNotEmptyException;
import java.nio.file.FileAlreadyExistsException; import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.LinkOption; import java.nio.file.LinkOption;
import java.nio.file.NoSuchFileException;
import java.nio.file.NotDirectoryException;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
public final class MountWithinParentUtil { public final class MountWithinParentUtil {
@@ -22,31 +20,33 @@ public final class MountWithinParentUtil {
private MountWithinParentUtil() {} private MountWithinParentUtil() {}
static void prepareParentNoMountPoint(Path mountPoint) throws MountPointPreparationException { static void prepareParentNoMountPoint(Path mountPoint) throws IllegalMountPointException, IOException {
Path hideaway = getHideaway(mountPoint); Path hideaway = getHideaway(mountPoint);
var mpExists = Files.exists(mountPoint, LinkOption.NOFOLLOW_LINKS); var mpState = getMountPointState(mountPoint);
var hideExists = Files.exists(hideaway, LinkOption.NOFOLLOW_LINKS); var hideExists = Files.exists(hideaway, LinkOption.NOFOLLOW_LINKS);
//TODO: possible improvement by just deleting an _empty_ hideaway if (mpState == MountPointState.BROKEN_JUNCTION) {
if (mpExists && hideExists) { //both resources exist (whatever type) LOG.info("Mountpoint \"{}\" is still a junction. Deleting it.", mountPoint);
throw new MountPointPreparationException(new FileAlreadyExistsException(hideaway.toString())); Files.delete(mountPoint); //Throws if mountPoint is also a non-empty folder
} else if (!mpExists && !hideExists) { //neither mountpoint nor hideaway exist mpState = MountPointState.NOT_EXISTING;
throw new MountPointPreparationException(new NoSuchFileException(mountPoint.toString())); }
} else if (!mpExists) { //only hideaway exists
checkIsDirectory(hideaway);
LOG.info("Mountpoint {} seems to be not properly cleaned up. Will be fixed on unmount.", mountPoint);
try {
if (SystemUtils.IS_OS_WINDOWS) {
Files.setAttribute(hideaway, WIN_HIDDEN_ATTR, true, LinkOption.NOFOLLOW_LINKS);
}
} catch (IOException e) {
throw new MountPointPreparationException(e);
}
} else { //only mountpoint exists
try {
checkIsDirectory(mountPoint);
checkIsEmpty(mountPoint);
if (mpState == MountPointState.NOT_EXISTING && !hideExists) { //neither mountpoint nor hideaway exist
throw new MountPointNotExistingException(mountPoint);
} else if (mpState == MountPointState.NOT_EXISTING) { //only hideaway exists
checkIsHideawayDirectory(mountPoint, hideaway);
LOG.info("Mountpoint {} seems to be not properly cleaned up. Will be fixed on unmount.", mountPoint);
if (SystemUtils.IS_OS_WINDOWS) {
Files.setAttribute(hideaway, WIN_HIDDEN_ATTR, true, LinkOption.NOFOLLOW_LINKS);
}
} else {
assert mpState == MountPointState.EMPTY_DIR;
try {
if (hideExists) { //... with hideaway
removeResidualHideaway(mountPoint, hideaway);
}
//... (now) without hideaway
Files.move(mountPoint, hideaway); Files.move(mountPoint, hideaway);
if (SystemUtils.IS_OS_WINDOWS) { if (SystemUtils.IS_OS_WINDOWS) {
Files.setAttribute(hideaway, WIN_HIDDEN_ATTR, true, LinkOption.NOFOLLOW_LINKS); Files.setAttribute(hideaway, WIN_HIDDEN_ATTR, true, LinkOption.NOFOLLOW_LINKS);
@@ -54,30 +54,66 @@ public final class MountWithinParentUtil {
int attempts = 0; int attempts = 0;
while (!Files.notExists(mountPoint)) { while (!Files.notExists(mountPoint)) {
if (attempts >= 10) { if (attempts >= 10) {
throw new MountPointPreparationException("Path " + mountPoint + " could not be cleared"); throw new MountPointCleanupFailedException(mountPoint);
} }
Thread.sleep(1000); Thread.sleep(1000);
attempts++; attempts++;
} }
} catch (IOException e) {
throw new MountPointPreparationException(e);
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
throw new MountPointPreparationException(e); throw new RuntimeException(e);
} }
} }
} }
//visible for testing
static MountPointState getMountPointState(Path path) throws IOException, IllegalMountPointException {
if (Files.notExists(path, LinkOption.NOFOLLOW_LINKS)) {
return MountPointState.NOT_EXISTING;
}
if (!Files.readAttributes(path, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS).isOther()) {
checkIsMountPointDirectory(path);
checkIsMountPointEmpty(path);
return MountPointState.EMPTY_DIR;
}
if (Files.exists(path /* FOLLOW_LINKS */)) { //Both junction and target exist
throw new MountPointInUseException(path);
}
return MountPointState.BROKEN_JUNCTION;
}
//visible for testing
enum MountPointState {
NOT_EXISTING,
EMPTY_DIR,
BROKEN_JUNCTION;
}
//visible for testing
static void removeResidualHideaway(Path mountPoint, Path hideaway) throws IOException {
checkIsHideawayDirectory(mountPoint, hideaway);
Files.delete(hideaway); //Fails if not empty
}
static void cleanup(Path mountPoint) { static void cleanup(Path mountPoint) {
Path hideaway = getHideaway(mountPoint); Path hideaway = getHideaway(mountPoint);
try { try {
waitForMountpointRestoration(mountPoint); waitForMountpointRestoration(mountPoint);
if (Files.notExists(hideaway, LinkOption.NOFOLLOW_LINKS)) {
LOG.error("Unable to restore hidden directory to mountpoint \"{}\": Directory does not exist.", mountPoint);
return;
}
Files.move(hideaway, mountPoint); Files.move(hideaway, mountPoint);
if (SystemUtils.IS_OS_WINDOWS) { if (SystemUtils.IS_OS_WINDOWS) {
Files.setAttribute(mountPoint, WIN_HIDDEN_ATTR, false); Files.setAttribute(mountPoint, WIN_HIDDEN_ATTR, false);
} }
} catch (IOException e) { } catch (IOException e) {
LOG.error("Unable to restore hidden directory to mountpoint {}.", mountPoint, e); LOG.error("Unable to restore hidden directory to mountpoint \"{}\".", mountPoint, e);
} }
} }
@@ -99,16 +135,22 @@ public final class MountWithinParentUtil {
} }
} }
private static void checkIsDirectory(Path toCheck) throws MountPointPreparationException { private static void checkIsMountPointDirectory(Path toCheck) throws IllegalMountPointException {
if (!Files.isDirectory(toCheck, LinkOption.NOFOLLOW_LINKS)) { if (!Files.isDirectory(toCheck, LinkOption.NOFOLLOW_LINKS)) {
throw new MountPointPreparationException(new NotDirectoryException(toCheck.toString())); throw new MountPointNotEmptyDirectoryException(toCheck, "Mountpoint is not a directory: " + toCheck);
} }
} }
private static void checkIsEmpty(Path toCheck) throws MountPointPreparationException, IOException { private static void checkIsHideawayDirectory(Path mountPoint, Path hideawayToCheck) {
if (!Files.isDirectory(hideawayToCheck, LinkOption.NOFOLLOW_LINKS)) {
throw new HideawayNotDirectoryException(mountPoint, hideawayToCheck);
}
}
private static void checkIsMountPointEmpty(Path toCheck) throws IllegalMountPointException, IOException {
try (var dirStream = Files.list(toCheck)) { try (var dirStream = Files.list(toCheck)) {
if (dirStream.findFirst().isPresent()) { if (dirStream.findFirst().isPresent()) {
throw new MountPointPreparationException(new DirectoryNotEmptyException(toCheck.toString())); throw new MountPointNotEmptyDirectoryException(toCheck, "Mountpoint directory is not empty: " + toCheck);
} }
} }
} }
@@ -99,7 +99,7 @@ public class Mounter {
var mpIsDriveLetter = userChosenMountPoint.toString().matches("[A-Z]:\\\\"); var mpIsDriveLetter = userChosenMountPoint.toString().matches("[A-Z]:\\\\");
if (mpIsDriveLetter) { if (mpIsDriveLetter) {
if (driveLetters.getOccupied().contains(userChosenMountPoint)) { if (driveLetters.getOccupied().contains(userChosenMountPoint)) {
throw new MountPointInUseException(userChosenMountPoint.toString()); throw new MountPointInUseException(userChosenMountPoint);
} }
} else if (canMountToParent && !canMountToDir) { } else if (canMountToParent && !canMountToDir) {
MountWithinParentUtil.prepareParentNoMountPoint(userChosenMountPoint); MountWithinParentUtil.prepareParentNoMountPoint(userChosenMountPoint);
@@ -115,13 +115,13 @@ public class Mounter {
|| (!canMountToParent && !mpIsDriveLetter) // || (!canMountToParent && !mpIsDriveLetter) //
|| (!canMountToDir && !canMountToParent && !canMountToSystem && !canMountToDriveLetter); || (!canMountToDir && !canMountToParent && !canMountToSystem && !canMountToDriveLetter);
if (configNotSupported) { if (configNotSupported) {
throw new MountPointNotSupportedException(e.getMessage()); throw new MountPointNotSupportedException(userChosenMountPoint, e.getMessage());
} else if (canMountToDir && !canMountToParent && !Files.exists(userChosenMountPoint)) { } else if (canMountToDir && !canMountToParent && !Files.exists(userChosenMountPoint)) {
//mountpoint must exist //mountpoint must exist
throw new MountPointNotExistsException(e.getMessage()); throw new MountPointNotExistingException(userChosenMountPoint, e.getMessage());
} else { } else {
//TODO: add specific exception for !canMountToDir && canMountToParent && !Files.notExists(userChosenMountPoint) //TODO: add specific exception for !canMountToDir && canMountToParent && !Files.notExists(userChosenMountPoint)
throw new IllegalMountPointException(e.getMessage()); throw new IllegalMountPointException(userChosenMountPoint, e.getMessage());
} }
} }
} }
@@ -65,7 +65,6 @@ public class Settings {
public final IntegerProperty windowYPosition; public final IntegerProperty windowYPosition;
public final IntegerProperty windowWidth; public final IntegerProperty windowWidth;
public final IntegerProperty windowHeight; public final IntegerProperty windowHeight;
public final StringProperty displayConfiguration;
public final StringProperty language; public final StringProperty language;
public final StringProperty mountService; public final StringProperty mountService;
public final StringProperty lastUpdateCheck; public final StringProperty lastUpdateCheck;
@@ -103,7 +102,6 @@ public class Settings {
this.windowYPosition = new SimpleIntegerProperty(this, "windowYPosition", json.windowYPosition); this.windowYPosition = new SimpleIntegerProperty(this, "windowYPosition", json.windowYPosition);
this.windowWidth = new SimpleIntegerProperty(this, "windowWidth", json.windowWidth); this.windowWidth = new SimpleIntegerProperty(this, "windowWidth", json.windowWidth);
this.windowHeight = new SimpleIntegerProperty(this, "windowHeight", json.windowHeight); this.windowHeight = new SimpleIntegerProperty(this, "windowHeight", json.windowHeight);
this.displayConfiguration = new SimpleStringProperty(this, "displayConfiguration", json.displayConfiguration);
this.language = new SimpleStringProperty(this, "language", json.language); this.language = new SimpleStringProperty(this, "language", json.language);
this.mountService = new SimpleStringProperty(this, "mountService", json.mountService); this.mountService = new SimpleStringProperty(this, "mountService", json.mountService);
this.lastUpdateCheck = new SimpleStringProperty(this, "lastUpdateCheck", json.lastUpdateCheck); this.lastUpdateCheck = new SimpleStringProperty(this, "lastUpdateCheck", json.lastUpdateCheck);
@@ -131,7 +129,6 @@ public class Settings {
windowYPosition.addListener(this::somethingChanged); windowYPosition.addListener(this::somethingChanged);
windowWidth.addListener(this::somethingChanged); windowWidth.addListener(this::somethingChanged);
windowHeight.addListener(this::somethingChanged); windowHeight.addListener(this::somethingChanged);
displayConfiguration.addListener(this::somethingChanged);
language.addListener(this::somethingChanged); language.addListener(this::somethingChanged);
mountService.addListener(this::somethingChanged); mountService.addListener(this::somethingChanged);
lastUpdateCheck.addListener(this::somethingChanged); lastUpdateCheck.addListener(this::somethingChanged);
@@ -186,7 +183,6 @@ public class Settings {
json.windowYPosition = windowYPosition.get(); json.windowYPosition = windowYPosition.get();
json.windowWidth = windowWidth.get(); json.windowWidth = windowWidth.get();
json.windowHeight = windowHeight.get(); json.windowHeight = windowHeight.get();
json.displayConfiguration = displayConfiguration.get();
json.language = language.get(); json.language = language.get();
json.mountService = mountService.get(); json.mountService = mountService.get();
json.lastUpdateCheck = lastUpdateCheck.get(); json.lastUpdateCheck = lastUpdateCheck.get();
@@ -31,9 +31,6 @@ class SettingsJson {
@JsonProperty("theme") @JsonProperty("theme")
UiTheme theme = Settings.DEFAULT_THEME; UiTheme theme = Settings.DEFAULT_THEME;
@JsonProperty("displayConfiguration")
String displayConfiguration;
@JsonProperty("keychainProvider") @JsonProperty("keychainProvider")
String keychainProvider = Settings.DEFAULT_KEYCHAIN_PROVIDER; String keychainProvider = Settings.DEFAULT_KEYCHAIN_PROVIDER;
@@ -314,10 +314,6 @@ public class Vault {
return vaultSettings.path.get(); return vaultSettings.path.get();
} }
CryptoFileSystem getCryptoFileSystem() {
return cryptoFileSystem.get();
}
/** /**
* Gets from the cleartext path its ciphertext counterpart. * Gets from the cleartext path its ciphertext counterpart.
* *
@@ -326,7 +322,23 @@ public class Vault {
* @throws IllegalStateException if the vault is not unlocked * @throws IllegalStateException if the vault is not unlocked
*/ */
public Path getCiphertextPath(Path cleartextPath) throws IOException { public Path getCiphertextPath(Path cleartextPath) throws IOException {
return state.get().getCiphertextPath(this, cleartextPath); if (!state.getValue().equals(VaultState.Value.UNLOCKED)) {
throw new IllegalStateException("Vault is not unlocked");
}
var fs = cryptoFileSystem.get();
var osPathSeparator = cleartextPath.getFileSystem().getSeparator();
var cryptoFsPathSeparator = fs.getSeparator();
if (getMountPoint() instanceof Mountpoint.WithPath mp) {
var absoluteCryptoFsPath = cryptoFsPathSeparator + mp.path().relativize(cleartextPath).toString();
if (!cryptoFsPathSeparator.equals(osPathSeparator)) {
absoluteCryptoFsPath = absoluteCryptoFsPath.replace(osPathSeparator, cryptoFsPathSeparator);
}
var cryptoPath = fs.getPath(absoluteCryptoFsPath);
return fs.getCiphertextPath(cryptoPath);
} else {
throw new UnsupportedOperationException("URI mount points not supported.");
}
} }
public VaultConfigCache getVaultConfigCache() { public VaultConfigCache getVaultConfigCache() {
@@ -1,7 +1,6 @@
package org.cryptomator.common.vaults; package org.cryptomator.common.vaults;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import org.cryptomator.integrations.mount.Mountpoint;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -9,8 +8,6 @@ import javax.inject.Inject;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.beans.value.ObservableObjectValue; import javafx.beans.value.ObservableObjectValue;
import javafx.beans.value.ObservableValueBase; import javafx.beans.value.ObservableValueBase;
import java.io.IOException;
import java.nio.file.Path;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Condition;
@@ -46,40 +43,12 @@ public class VaultState extends ObservableValueBase<VaultState.Value> implements
/** /**
* Vault is unlocked * Vault is unlocked
*/ */
UNLOCKED { UNLOCKED,
/**
* Gets from the cleartext path its ciphertext counterpart.
*
* @return Local os path to the ciphertext resource
* @throws IOException if an I/O error occurs
* @throws IllegalStateException if the vault is not unlocked
*/
Path getCiphertextPath(Vault vault, Path cleartextPath) throws IOException {
var fs = vault.getCryptoFileSystem();
var osPathSeparator = cleartextPath.getFileSystem().getSeparator();
var cryptoFsPathSeparator = fs.getSeparator();
if (vault.getMountPoint() instanceof Mountpoint.WithPath mp) {
var absoluteCryptoFsPath = cryptoFsPathSeparator + mp.path().relativize(cleartextPath).toString();
if (!cryptoFsPathSeparator.equals(osPathSeparator)) {
absoluteCryptoFsPath = absoluteCryptoFsPath.replace(osPathSeparator, cryptoFsPathSeparator);
}
var cryptoPath = fs.getPath(absoluteCryptoFsPath);
return fs.getCiphertextPath(cryptoPath);
} else {
throw new UnsupportedOperationException("URI mount points not supported.");
}
}
},
/** /**
* Unknown state due to preceding unrecoverable exceptions. * Unknown state due to preceding unrecoverable exceptions.
*/ */
ERROR; ERROR;
Path getCiphertextPath(Vault vault, Path cleartextPath) throws IOException {
throw new IllegalStateException("Vault is not unlocked");
}
} }
private final AtomicReference<Value> value; private final AtomicReference<Value> value;
@@ -45,9 +45,8 @@ public abstract class AddVaultModule {
@Provides @Provides
@AddVaultWizardWindow @AddVaultWizardWindow
@AddVaultWizardScoped @AddVaultWizardScoped
static Stage provideStage(StageFactory factory, @PrimaryStage Stage primaryStage, ResourceBundle resourceBundle) { static Stage provideStage(StageFactory factory, @PrimaryStage Stage primaryStage) {
Stage stage = factory.create(); Stage stage = factory.create();
stage.setTitle(resourceBundle.getString("addvaultwizard.title"));
stage.setResizable(false); stage.setResizable(false);
stage.initModality(Modality.WINDOW_MODAL); stage.initModality(Modality.WINDOW_MODAL);
stage.initOwner(primaryStage); stage.initOwner(primaryStage);
@@ -90,13 +89,6 @@ public abstract class AddVaultModule {
// ------------------ // ------------------
@Provides
@FxmlScene(FxmlFile.ADDVAULT_WELCOME)
@AddVaultWizardScoped
static Scene provideWelcomeScene(@AddVaultWizardWindow FxmlLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_WELCOME);
}
@Provides @Provides
@FxmlScene(FxmlFile.ADDVAULT_EXISTING) @FxmlScene(FxmlFile.ADDVAULT_EXISTING)
@AddVaultWizardScoped @AddVaultWizardScoped
@@ -148,11 +140,6 @@ public abstract class AddVaultModule {
// ------------------ // ------------------
@Binds
@IntoMap
@FxControllerKey(AddVaultWelcomeController.class)
abstract FxController bindWelcomeController(AddVaultWelcomeController controller);
@Binds @Binds
@IntoMap @IntoMap
@FxControllerKey(ChooseExistingVaultController.class) @FxControllerKey(ChooseExistingVaultController.class)
@@ -1,38 +0,0 @@
package org.cryptomator.ui.addvaultwizard;
import dagger.Lazy;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxmlFile;
import org.cryptomator.ui.common.FxmlScene;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javafx.scene.Scene;
import javafx.stage.Stage;
@AddVaultWizardScoped
public class AddVaultWelcomeController implements FxController {
private static final Logger LOG = LoggerFactory.getLogger(AddVaultWelcomeController.class);
private final Stage window;
private final Lazy<Scene> chooseExistingVaultScene;
private final Lazy<Scene> createNewVaultScene;
@Inject
AddVaultWelcomeController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_EXISTING) Lazy<Scene> chooseExistingVaultScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_NAME) Lazy<Scene> createNewVaultScene) {
this.window = window;
this.chooseExistingVaultScene = chooseExistingVaultScene;
this.createNewVaultScene = createNewVaultScene;
}
public void createNewVault() {
LOG.debug("AddVaultWelcomeController.createNewVault()");
window.setScene(createNewVaultScene.get());
}
public void chooseExistingVault() {
LOG.debug("AddVaultWelcomeController.chooseExistingVault()");
window.setScene(chooseExistingVaultScene.get());
}
}
@@ -12,6 +12,7 @@ import org.cryptomator.ui.common.FxmlScene;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.util.ResourceBundle;
@AddVaultWizardScoped @AddVaultWizardScoped
@Subcomponent(modules = {AddVaultModule.class}) @Subcomponent(modules = {AddVaultModule.class})
@@ -20,12 +21,23 @@ public interface AddVaultWizardComponent {
@AddVaultWizardWindow @AddVaultWizardWindow
Stage window(); Stage window();
@FxmlScene(FxmlFile.ADDVAULT_WELCOME) @FxmlScene(FxmlFile.ADDVAULT_NEW_NAME)
Lazy<Scene> scene(); Lazy<Scene> sceneNew();
@FxmlScene(FxmlFile.ADDVAULT_EXISTING)
Lazy<Scene> sceneExisting();
default void showAddVaultWizard() { default void showAddNewVaultWizard(ResourceBundle resourceBundle) {
Stage stage = window(); Stage stage = window();
stage.setScene(scene().get()); stage.setScene(sceneNew().get());
stage.setTitle(resourceBundle.getString("addvaultwizard.new.title"));
stage.sizeToScene();
stage.show();
}
default void showAddExistingVaultWizard(ResourceBundle resourceBundle) {
Stage stage = window();
stage.setScene(sceneExisting().get());
stage.setTitle(resourceBundle.getString("addvaultwizard.existing.title"));
stage.sizeToScene(); stage.sizeToScene();
stage.show(); stage.show();
} }
@@ -35,7 +35,6 @@ public class ChooseExistingVaultController implements FxController {
private static final Logger LOG = LoggerFactory.getLogger(ChooseExistingVaultController.class); private static final Logger LOG = LoggerFactory.getLogger(ChooseExistingVaultController.class);
private final Stage window; private final Stage window;
private final Lazy<Scene> welcomeScene;
private final Lazy<Scene> successScene; private final Lazy<Scene> successScene;
private final FxApplicationWindows appWindows; private final FxApplicationWindows appWindows;
private final ObjectProperty<Path> vaultPath; private final ObjectProperty<Path> vaultPath;
@@ -45,9 +44,15 @@ public class ChooseExistingVaultController implements FxController {
private final ObservableValue<Image> screenshot; private final ObservableValue<Image> screenshot;
@Inject @Inject
ChooseExistingVaultController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy<Scene> welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, FxApplicationWindows appWindows, ObjectProperty<Path> vaultPath, @AddVaultWizardWindow ObjectProperty<Vault> vault, VaultListManager vaultListManager, ResourceBundle resourceBundle, FxApplicationStyle applicationStyle) { ChooseExistingVaultController(@AddVaultWizardWindow Stage window, //
@FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, //
FxApplicationWindows appWindows, //
ObjectProperty<Path> vaultPath, //
@AddVaultWizardWindow ObjectProperty<Vault> vault, //
VaultListManager vaultListManager, //
ResourceBundle resourceBundle, //
FxApplicationStyle applicationStyle) {
this.window = window; this.window = window;
this.welcomeScene = welcomeScene;
this.successScene = successScene; this.successScene = successScene;
this.appWindows = appWindows; this.appWindows = appWindows;
this.vaultPath = vaultPath; this.vaultPath = vaultPath;
@@ -70,11 +75,6 @@ public class ChooseExistingVaultController implements FxController {
return new Image((Objects.requireNonNull(getClass().getResource(imageResourcePath)).toString())); return new Image((Objects.requireNonNull(getClass().getResource(imageResourcePath)).toString()));
} }
@FXML
public void back() {
window.setScene(welcomeScene.get());
}
@FXML @FXML
public void chooseFileAndNext() { public void chooseFileAndNext() {
FileChooser fileChooser = new FileChooser(); FileChooser fileChooser = new FileChooser();
@@ -17,7 +17,6 @@ import javafx.scene.Scene;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ResourceBundle;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@AddVaultWizardScoped @AddVaultWizardScoped
@@ -27,16 +26,17 @@ public class CreateNewVaultNameController implements FxController {
public TextField textField; public TextField textField;
private final Stage window; private final Stage window;
private final Lazy<Scene> welcomeScene;
private final Lazy<Scene> chooseLocationScene; private final Lazy<Scene> chooseLocationScene;
private final ObjectProperty<Path> vaultPath; private final ObjectProperty<Path> vaultPath;
private final StringProperty vaultName; private final StringProperty vaultName;
private final BooleanBinding validVaultName; private final BooleanBinding validVaultName;
@Inject @Inject
CreateNewVaultNameController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy<Scene> welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy<Scene> chooseLocationScene, ObjectProperty<Path> vaultPath, @Named("vaultName") StringProperty vaultName, ResourceBundle resourceBundle) { CreateNewVaultNameController(@AddVaultWizardWindow Stage window, //
@FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy<Scene> chooseLocationScene, //
ObjectProperty<Path> vaultPath, //
@Named("vaultName") StringProperty vaultName) {
this.window = window; this.window = window;
this.welcomeScene = welcomeScene;
this.chooseLocationScene = chooseLocationScene; this.chooseLocationScene = chooseLocationScene;
this.vaultPath = vaultPath; this.vaultPath = vaultPath;
this.vaultName = vaultName; this.vaultName = vaultName;
@@ -58,11 +58,6 @@ public class CreateNewVaultNameController implements FxController {
} }
} }
@FXML
public void back() {
window.setScene(welcomeScene.get());
}
@FXML @FXML
public void next() { public void next() {
window.setScene(chooseLocationScene.get()); window.setScene(chooseLocationScene.get());
@@ -8,7 +8,6 @@ public enum FxmlFile {
ADDVAULT_NEW_PASSWORD("/fxml/addvault_new_password.fxml"), // ADDVAULT_NEW_PASSWORD("/fxml/addvault_new_password.fxml"), //
ADDVAULT_NEW_RECOVERYKEY("/fxml/addvault_new_recoverykey.fxml"), // ADDVAULT_NEW_RECOVERYKEY("/fxml/addvault_new_recoverykey.fxml"), //
ADDVAULT_SUCCESS("/fxml/addvault_success.fxml"), // ADDVAULT_SUCCESS("/fxml/addvault_success.fxml"), //
ADDVAULT_WELCOME("/fxml/addvault_welcome.fxml"), //
CHANGEPASSWORD("/fxml/changepassword.fxml"), // CHANGEPASSWORD("/fxml/changepassword.fxml"), //
CONVERTVAULT_HUBTOPASSWORD_START("/fxml/convertvault_hubtopassword_start.fxml"), // CONVERTVAULT_HUBTOPASSWORD_START("/fxml/convertvault_hubtopassword_start.fxml"), //
CONVERTVAULT_HUBTOPASSWORD_CONVERT("/fxml/convertvault_hubtopassword_convert.fxml"), // CONVERTVAULT_HUBTOPASSWORD_CONVERT("/fxml/convertvault_hubtopassword_convert.fxml"), //
@@ -42,19 +42,20 @@ public class ErrorController implements FxController {
private static final ObjectMapper JSON = new ObjectMapper(); private static final ObjectMapper JSON = new ObjectMapper();
private static final Logger LOG = LoggerFactory.getLogger(ErrorController.class); private static final Logger LOG = LoggerFactory.getLogger(ErrorController.class);
private static final String ERROR_CODES_URL = "https://gist.githubusercontent.com/cryptobot/accba9fb9555e7192271b85606f97230/raw/errorcodes.json"; private static final String ERROR_CODES_URL = "https://api.cryptomator.org/desktop/error-codes.json";
private static final String SEARCH_URL_FORMAT = "https://github.com/cryptomator/cryptomator/discussions/categories/errors?discussions_q=category:Errors+%s"; private static final String SEARCH_URL_FORMAT = "https://github.com/cryptomator/cryptomator/discussions/categories/errors?discussions_q=category:Errors+%s";
private static final String REPORT_URL_FORMAT = "https://github.com/cryptomator/cryptomator/discussions/new?category=Errors&title=Error+%s&body=%s"; private static final String REPORT_URL_FORMAT = "https://github.com/cryptomator/cryptomator/discussions/new?category=Errors&title=Error+%s&body=%s";
private static final String SEARCH_ERRORCODE_DELIM = " OR "; private static final String SEARCH_ERRORCODE_DELIM = " OR ";
private static final String REPORT_BODY_TEMPLATE = """ private static final String REPORT_BODY_TEMPLATE = """
<!-- 💚 Thank you for reporting this error. -->
OS: %s / %s OS: %s / %s
App: %s / %s App: %s / %s
<!-- ✏ Please describe what happened as accurately as possible. --> <!-- ✏ Please describe what happened as accurately as possible. -->
Description:
<!-- 📋 Please also copy and paste the detail text from the error window. -->
<!-- 📋 Please also copy and paste the details from the error window. -->
<!-- Text enclosed like this (chevrons, exclamation mark, two dashes) is not visible to others! --> Details:
<!-- ❗ If the description or the detail text is missing, the discussion will be deleted. --> <!-- ❗ If the description or the detail text is missing, the discussion will be deleted. -->
"""; """;
@@ -65,11 +66,13 @@ public class ErrorController implements FxController {
private final Scene previousScene; private final Scene previousScene;
private final Stage window; private final Stage window;
private final Environment environment; private final Environment environment;
private final ExecutorService executorService;
private final BooleanProperty copiedDetails = new SimpleBooleanProperty(); private final BooleanProperty copiedDetails = new SimpleBooleanProperty();
private final ObjectProperty<ErrorDiscussion> matchingErrorDiscussion = new SimpleObjectProperty<>(); private final ObjectProperty<ErrorDiscussion> matchingErrorDiscussion = new SimpleObjectProperty<>();
private final BooleanExpression errorSolutionFound = matchingErrorDiscussion.isNotNull(); private final BooleanExpression errorSolutionFound = matchingErrorDiscussion.isNotNull();
private final BooleanProperty isLoadingHttpResponse = new SimpleBooleanProperty(); private final BooleanProperty isLoadingHttpResponse = new SimpleBooleanProperty();
private final BooleanProperty askedForLookupDatabasePermission = new SimpleBooleanProperty();
@Inject @Inject
ErrorController(Application application, @Named("stackTrace") String stackTrace, ErrorCode errorCode, @Nullable Scene previousScene, Stage window, Environment environment, ExecutorService executorService) { ErrorController(Application application, @Named("stackTrace") String stackTrace, ErrorCode errorCode, @Nullable Scene previousScene, Stage window, Environment environment, ExecutorService executorService) {
@@ -79,15 +82,7 @@ public class ErrorController implements FxController {
this.previousScene = previousScene; this.previousScene = previousScene;
this.window = window; this.window = window;
this.environment = environment; this.environment = environment;
this.executorService = executorService;
isLoadingHttpResponse.set(true);
HttpClient httpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
HttpRequest httpRequest = HttpRequest.newBuilder()//
.uri(URI.create(ERROR_CODES_URL))//
.build();
httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofInputStream())//
.thenAcceptAsync(this::loadHttpResponse, executorService)//
.whenCompleteAsync((r, e) -> isLoadingHttpResponse.set(false), Platform::runLater);
} }
@FXML @FXML
@@ -140,6 +135,24 @@ public class ErrorController implements FxController {
CompletableFuture.delayedExecutor(2, TimeUnit.SECONDS, Platform::runLater).execute(() -> copiedDetails.set(false)); CompletableFuture.delayedExecutor(2, TimeUnit.SECONDS, Platform::runLater).execute(() -> copiedDetails.set(false));
} }
@FXML
public void dismiss() {
askedForLookupDatabasePermission.set(true);
}
@FXML
public void lookUpSolution() {
isLoadingHttpResponse.set(true);
askedForLookupDatabasePermission.set(true);
HttpClient httpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
HttpRequest httpRequest = HttpRequest.newBuilder()//
.uri(URI.create(ERROR_CODES_URL))//
.build();
httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofInputStream())//
.thenAcceptAsync(this::loadHttpResponse, executorService)//
.whenCompleteAsync((r, e) -> isLoadingHttpResponse.set(false), Platform::runLater);
}
private void loadHttpResponse(HttpResponse<InputStream> response) { private void loadHttpResponse(HttpResponse<InputStream> response) {
if (response.statusCode() != 200) { if (response.statusCode() != 200) {
LOG.error("Status code {} when trying to load {} ", response.statusCode(), response.uri()); LOG.error("Status code {} when trying to load {} ", response.statusCode(), response.uri());
@@ -293,4 +306,12 @@ public class ErrorController implements FxController {
return isLoadingHttpResponse.get(); return isLoadingHttpResponse.get();
} }
public BooleanProperty askedForLookupDatabasePermissionProperty() {
return askedForLookupDatabasePermission;
}
public boolean getAskedForLookupDatabasePermission() {
return askedForLookupDatabasePermission.get();
}
} }
@@ -28,7 +28,7 @@ public abstract class UpdateCheckerModule {
private static final Logger LOG = LoggerFactory.getLogger(UpdateCheckerModule.class); private static final Logger LOG = LoggerFactory.getLogger(UpdateCheckerModule.class);
private static final URI LATEST_VERSION_URI = URI.create("https://api.cryptomator.org/updates/latestVersion.json"); private static final URI LATEST_VERSION_URI = URI.create("https://api.cryptomator.org/desktop/latest-version.json");
private static final Duration UPDATE_CHECK_INTERVAL = Duration.hours(3); private static final Duration UPDATE_CHECK_INTERVAL = Duration.hours(3);
private static final Duration DISABLED_UPDATE_CHECK_INTERVAL = Duration.hours(100000); // Duration.INDEFINITE leads to overflows... private static final Duration DISABLED_UPDATE_CHECK_INTERVAL = Duration.hours(100000); // Duration.INDEFINITE leads to overflows...
@@ -76,7 +76,7 @@ public class ReceiveKeyController implements FxController {
switch (response.statusCode()) { switch (response.statusCode()) {
case 200 -> retrievalSucceeded(response); case 200 -> retrievalSucceeded(response);
case 402 -> licenseExceeded(); case 402 -> licenseExceeded();
case 403 -> accessNotGranted(); case 403, 410 -> accessNotGranted(); // or vault has been archived, effectively disallowing access
case 404 -> needsDeviceRegistration(); case 404 -> needsDeviceRegistration();
default -> throw new IOException("Unexpected response " + response.statusCode()); default -> throw new IOException("Unexpected response " + response.statusCode());
} }
@@ -26,6 +26,7 @@ public interface MainWindowComponent {
default Stage showMainWindow() { default Stage showMainWindow() {
Stage stage = window(); Stage stage = window();
stage.setScene(scene().get()); stage.setScene(scene().get());
stage.setIconified(false);
stage.show(); stage.show();
stage.toFront(); stage.toFront();
stage.requestFocus(); stage.requestFocus();
@@ -16,6 +16,7 @@ import javafx.stage.Stage;
public class MainWindowSceneFactory extends DefaultSceneFactory { public class MainWindowSceneFactory extends DefaultSceneFactory {
protected static final KeyCodeCombination SHORTCUT_N = new KeyCodeCombination(KeyCode.N, KeyCombination.SHORTCUT_DOWN); protected static final KeyCodeCombination SHORTCUT_N = new KeyCodeCombination(KeyCode.N, KeyCombination.SHORTCUT_DOWN);
protected static final KeyCodeCombination SHORTCUT_O = new KeyCodeCombination(KeyCode.O, KeyCombination.SHORTCUT_DOWN);
private final Lazy<MainWindowTitleController> mainWindowTitleController; private final Lazy<MainWindowTitleController> mainWindowTitleController;
private final Lazy<VaultListController> vaultListController; private final Lazy<VaultListController> vaultListController;
@@ -34,6 +35,7 @@ public class MainWindowSceneFactory extends DefaultSceneFactory {
} else { } else {
scene.getAccelerators().put(SHORTCUT_W, mainWindowTitleController.get()::close); scene.getAccelerators().put(SHORTCUT_W, mainWindowTitleController.get()::close);
} }
scene.getAccelerators().put(SHORTCUT_N, vaultListController.get()::didClickAddVault); scene.getAccelerators().put(SHORTCUT_N, vaultListController.get()::didClickAddNewVault);
scene.getAccelerators().put(SHORTCUT_O, vaultListController.get()::didClickAddExistingVault);
} }
} }
@@ -6,7 +6,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import javax.inject.Inject; import javax.inject.Inject;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding; import javafx.beans.binding.BooleanBinding;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.fxml.FXML; import javafx.fxml.FXML;
@@ -15,6 +14,7 @@ import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Region; import javafx.scene.layout.Region;
import javafx.stage.Screen; import javafx.stage.Screen;
import javafx.stage.Stage; import javafx.stage.Stage;
import javafx.stage.WindowEvent;
@MainWindow @MainWindow
public class ResizeController implements FxController { public class ResizeController implements FxController {
@@ -53,48 +53,70 @@ public class ResizeController implements FxController {
public void initialize() { public void initialize() {
LOG.trace("init ResizeController"); LOG.trace("init ResizeController");
if (neverTouched()) { if (!neverTouched()) {
settings.displayConfiguration.set(getMonitorSizes()); window.setHeight(settings.windowHeight.get() > window.getMinHeight() ? settings.windowHeight.get() : window.getMinHeight());
return; window.setWidth(settings.windowWidth.get() > window.getMinWidth() ? settings.windowWidth.get() : window.getMinWidth());
} else { window.setX(settings.windowXPosition.get());
if (didDisplayConfigurationChange()) { window.setY(settings.windowYPosition.get());
//If the position is illegal, then the window appears on the main screen in the middle of the window.
Rectangle2D primaryScreenBounds = Screen.getPrimary().getBounds();
window.setX((primaryScreenBounds.getWidth() - window.getMinWidth()) / 2);
window.setY((primaryScreenBounds.getHeight() - window.getMinHeight()) / 2);
window.setWidth(window.getMinWidth());
window.setHeight(window.getMinHeight());
} else {
window.setHeight(settings.windowHeight.get() > window.getMinHeight() ? settings.windowHeight.get() : window.getMinHeight());
window.setWidth(settings.windowWidth.get() > window.getMinWidth() ? settings.windowWidth.get() : window.getMinWidth());
window.setX(settings.windowXPosition.get());
window.setY(settings.windowYPosition.get());
}
} }
savePositionalSettings();
window.setOnShowing(this::checkDisplayBounds);
} }
private boolean neverTouched() { private boolean neverTouched() {
return (settings.windowHeight.get() == 0) && (settings.windowWidth.get() == 0) && (settings.windowXPosition.get() == 0) && (settings.windowYPosition.get() == 0); return (settings.windowHeight.get() == 0) && (settings.windowWidth.get() == 0) && (settings.windowXPosition.get() == 0) && (settings.windowYPosition.get() == 0);
} }
private boolean didDisplayConfigurationChange() { private boolean isWithinDisplayBounds() {
String currentDisplayConfiguration = getMonitorSizes(); // (x1, y1) is the top left corner of the window, (x2, y2) is the bottom right corner
String settingsDisplayConfiguration = settings.displayConfiguration.get(); final double slack = 10;
boolean configurationHasChanged = !settingsDisplayConfiguration.equals(currentDisplayConfiguration); final double width = window.getWidth() - 2 * slack;
if (configurationHasChanged) settings.displayConfiguration.set(currentDisplayConfiguration); final double height = window.getHeight() - 2 * slack;
return configurationHasChanged; final double x1 = window.getX() + slack;
final double y1 = window.getY() + slack;
final double x2 = x1 + width;
final double y2 = y1 + height;
final ObservableList<Screen> screens = Screen.getScreensForRectangle(x1, y1, width, height);
// Find the total visible area of the window
double visibleArea = 0;
for (Screen screen : screens) {
Rectangle2D bounds = screen.getVisualBounds();
double xOverlap = Math.min(x2, bounds.getMaxX()) - Math.max(x1, bounds.getMinX());
double yOverlap = Math.min(y2, bounds.getMaxY()) - Math.max(y1, bounds.getMinY());
visibleArea += xOverlap * yOverlap;
}
final double windowArea = width * height;
// Within bounds if the visible area matches the window area
return visibleArea == windowArea;
} }
private String getMonitorSizes() { private void checkDisplayBounds(WindowEvent evt) {
ObservableList<Screen> screens = Screen.getScreens();
StringBuilder sb = new StringBuilder(); // Minimizing a window in Windows and closing it could result in an out of bounds position at (x, y) = (-32000, -32000)
for (int i = 0; i < screens.size(); i++) { // See https://devblogs.microsoft.com/oldnewthing/20041028-00/?p=37453
Rectangle2D screenBounds = screens.get(i).getBounds(); // If the position is (-32000, -32000), restore to the last saved position
if (!sb.isEmpty()) sb.append(" "); if (window.getX() == -32000 && window.getY() == -32000) {
sb.append("displayId: " + i + ", " + screenBounds.getWidth() + "x" + screenBounds.getHeight() + ";"); window.setX(settings.windowXPosition.get());
window.setY(settings.windowYPosition.get());
window.setWidth(settings.windowWidth.get());
window.setHeight(settings.windowHeight.get());
}
if (!isWithinDisplayBounds()) {
// If the position is illegal, then the window appears on the main screen in the middle of the window.
Rectangle2D primaryScreenBounds = Screen.getPrimary().getBounds();
window.setX((primaryScreenBounds.getWidth() - window.getMinWidth()) / 2);
window.setY((primaryScreenBounds.getHeight() - window.getMinHeight()) / 2);
window.setWidth(window.getMinWidth());
window.setHeight(window.getMinHeight());
savePositionalSettings();
} }
return sb.toString();
} }
private void startResize(MouseEvent evt) { private void startResize(MouseEvent evt) {
@@ -183,5 +205,4 @@ public class ResizeController implements FxController {
public boolean isShowResizingArrows() { public boolean isShowResizingArrows() {
return showResizingArrows.get(); return showResizingArrows.get();
} }
} }
@@ -20,7 +20,9 @@ import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.value.ObservableValue; import javafx.beans.value.ObservableValue;
import javafx.collections.ListChangeListener; import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.event.Event;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ListView; import javafx.scene.control.ListView;
import javafx.scene.input.ContextMenuEvent; import javafx.scene.input.ContextMenuEvent;
import javafx.scene.input.DragEvent; import javafx.scene.input.DragEvent;
@@ -34,6 +36,7 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.ResourceBundle;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -59,12 +62,21 @@ public class VaultListController implements FxController {
private final RemoveVaultComponent.Builder removeVaultDialogue; private final RemoveVaultComponent.Builder removeVaultDialogue;
private final VaultListManager vaultListManager; private final VaultListManager vaultListManager;
private final BooleanProperty draggingVaultOver = new SimpleBooleanProperty(); private final BooleanProperty draggingVaultOver = new SimpleBooleanProperty();
private final ResourceBundle resourceBundle;
public ListView<Vault> vaultList; public ListView<Vault> vaultList;
public StackPane root; public StackPane root;
public Button addVaultBtn;
@Inject @Inject
VaultListController(@MainWindow Stage mainWindow, ObservableList<Vault> vaults, ObjectProperty<Vault> selectedVault, VaultListCellFactory cellFactory, AddVaultWizardComponent.Builder addVaultWizard, RemoveVaultComponent.Builder removeVaultDialogue, VaultListManager vaultListManager) { VaultListController(@MainWindow Stage mainWindow, //
ObservableList<Vault> vaults, //
ObjectProperty<Vault> selectedVault, //
VaultListCellFactory cellFactory, //
AddVaultWizardComponent.Builder addVaultWizard, //
RemoveVaultComponent.Builder removeVaultDialogue, //
VaultListManager vaultListManager, //
ResourceBundle resourceBundle) {
this.mainWindow = mainWindow; this.mainWindow = mainWindow;
this.vaults = vaults; this.vaults = vaults;
this.selectedVault = selectedVault; this.selectedVault = selectedVault;
@@ -72,6 +84,7 @@ public class VaultListController implements FxController {
this.addVaultWizard = addVaultWizard; this.addVaultWizard = addVaultWizard;
this.removeVaultDialogue = removeVaultDialogue; this.removeVaultDialogue = removeVaultDialogue;
this.vaultListManager = vaultListManager; this.vaultListManager = vaultListManager;
this.resourceBundle = resourceBundle;
this.emptyVaultList = Bindings.isEmpty(vaults); this.emptyVaultList = Bindings.isEmpty(vaults);
@@ -127,6 +140,15 @@ public class VaultListController implements FxController {
root.setOnDragOver(this::handleDragEvent); root.setOnDragOver(this::handleDragEvent);
root.setOnDragDropped(this::handleDragEvent); root.setOnDragDropped(this::handleDragEvent);
root.setOnDragExited(this::handleDragEvent); root.setOnDragExited(this::handleDragEvent);
addVaultBtn.addEventFilter(ContextMenuEvent.CONTEXT_MENU_REQUESTED, Event::consume);
}
@FXML
private void showMenu() {
double screenX = addVaultBtn.localToScreen(addVaultBtn.getBoundsInLocal()).getMinX();
double screenY = addVaultBtn.localToScreen(addVaultBtn.getBoundsInLocal()).getMaxY();
addVaultBtn.getContextMenu().show(addVaultBtn, screenX, screenY);
} }
private void deselect(MouseEvent released) { private void deselect(MouseEvent released) {
@@ -144,8 +166,13 @@ public class VaultListController implements FxController {
} }
@FXML @FXML
public void didClickAddVault() { public void didClickAddNewVault() {
addVaultWizard.build().showAddVaultWizard(); addVaultWizard.build().showAddNewVaultWizard(resourceBundle);
}
@FXML
public void didClickAddExistingVault() {
addVaultWizard.build().showAddExistingVaultWizard(resourceBundle);
} }
private void pressedShortcutToRemoveVault() { private void pressedShortcutToRemoveVault() {
@@ -7,6 +7,7 @@ import org.cryptomator.integrations.common.Priority;
import org.cryptomator.integrations.tray.ActionItem; import org.cryptomator.integrations.tray.ActionItem;
import org.cryptomator.integrations.tray.SeparatorItem; import org.cryptomator.integrations.tray.SeparatorItem;
import org.cryptomator.integrations.tray.SubMenuItem; import org.cryptomator.integrations.tray.SubMenuItem;
import org.cryptomator.integrations.tray.TrayIconLoader;
import org.cryptomator.integrations.tray.TrayMenuController; import org.cryptomator.integrations.tray.TrayMenuController;
import org.cryptomator.integrations.tray.TrayMenuException; import org.cryptomator.integrations.tray.TrayMenuException;
import org.cryptomator.integrations.tray.TrayMenuItem; import org.cryptomator.integrations.tray.TrayMenuItem;
@@ -14,6 +15,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.awt.AWTException; import java.awt.AWTException;
import java.awt.Image;
import java.awt.Menu; import java.awt.Menu;
import java.awt.MenuItem; import java.awt.MenuItem;
import java.awt.PopupMenu; import java.awt.PopupMenu;
@@ -23,7 +25,12 @@ import java.awt.TrayIcon;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.List; import java.util.List;
import java.util.function.Consumer;
/**
* Fallback tray icon implementation using AWT. This will only be used if no better implementation is found.
* @see <a href="https://github.com/cryptomator/integrations-linux/blob/33f9a4685b781b55fcce399b8618818bfc08cbdf/src/main/java/org/cryptomator/linux/tray/AppindicatorTrayMenuController.java">preferred AppIndicator-based implementation used on Linux</a>
*/
@CheckAvailability @CheckAvailability
@Priority(Priority.FALLBACK) @Priority(Priority.FALLBACK)
public class AwtTrayMenuController implements TrayMenuController { public class AwtTrayMenuController implements TrayMenuController {
@@ -32,6 +39,7 @@ public class AwtTrayMenuController implements TrayMenuController {
private final PopupMenu menu = new PopupMenu(); private final PopupMenu menu = new PopupMenu();
private TrayIcon trayIcon; private TrayIcon trayIcon;
private Image image;
@CheckAvailability @CheckAvailability
public static boolean isAvailable() { public static boolean isAvailable() {
@@ -39,8 +47,9 @@ public class AwtTrayMenuController implements TrayMenuController {
} }
@Override @Override
public void showTrayIcon(byte[] imageData, Runnable defaultAction, String tooltip) throws TrayMenuException { public void showTrayIcon(Consumer<TrayIconLoader> iconLoader, Runnable defaultAction, String tooltip) throws TrayMenuException {
var image = Toolkit.getDefaultToolkit().createImage(imageData); TrayIconLoader.PngData callback = this::showTrayIconWithPngData;
iconLoader.accept(callback);
trayIcon = new TrayIcon(image, tooltip, menu); trayIcon = new TrayIcon(image, tooltip, menu);
trayIcon.setImageAutoSize(true); trayIcon.setImageAutoSize(true);
@@ -56,8 +65,17 @@ public class AwtTrayMenuController implements TrayMenuController {
} }
} }
private void showTrayIconWithPngData(byte[] imageData) {
image = Toolkit.getDefaultToolkit().createImage(imageData);
}
@Override @Override
public void updateTrayIcon(byte[] imageData) { public void updateTrayIcon(Consumer<TrayIconLoader> iconLoader) {
TrayIconLoader.PngData callback = this::updateTrayIconWithPngData;
iconLoader.accept(callback);
}
private void updateTrayIconWithPngData(byte[] imageData) {
if (trayIcon == null) { if (trayIcon == null) {
throw new IllegalStateException("Failed to update the icon as it has not yet been added"); throw new IllegalStateException("Failed to update the icon as it has not yet been added");
} }
@@ -100,5 +118,4 @@ public class AwtTrayMenuController implements TrayMenuController {
} }
} }
} }
} }
@@ -7,6 +7,7 @@ import org.cryptomator.common.vaults.VaultListManager;
import org.cryptomator.integrations.tray.ActionItem; import org.cryptomator.integrations.tray.ActionItem;
import org.cryptomator.integrations.tray.SeparatorItem; import org.cryptomator.integrations.tray.SeparatorItem;
import org.cryptomator.integrations.tray.SubMenuItem; import org.cryptomator.integrations.tray.SubMenuItem;
import org.cryptomator.integrations.tray.TrayIconLoader;
import org.cryptomator.integrations.tray.TrayMenuController; import org.cryptomator.integrations.tray.TrayMenuController;
import org.cryptomator.integrations.tray.TrayMenuException; import org.cryptomator.integrations.tray.TrayMenuException;
import org.cryptomator.integrations.tray.TrayMenuItem; import org.cryptomator.integrations.tray.TrayMenuItem;
@@ -65,7 +66,12 @@ public class TrayMenuBuilder {
}); });
try { try {
trayMenu.showTrayIcon(getAppropriateTrayIconImage(), this::showMainWindow, "Cryptomator"); trayMenu.showTrayIcon(loader -> {
switch (loader) {
case TrayIconLoader.PngData l -> l.loadPng(getAppropriateTrayIconImage());
case TrayIconLoader.FreedesktopIconName l -> l.lookupByName(getAppropriateFreedesktopIconName());
}
}, this::showMainWindow, "Cryptomator");
trayMenu.onBeforeOpenMenu(() -> { trayMenu.onBeforeOpenMenu(() -> {
for (Vault vault : vaults) { for (Vault vault : vaults) {
VaultListManager.redetermineVaultState(vault); VaultListManager.redetermineVaultState(vault);
@@ -84,7 +90,12 @@ public class TrayMenuBuilder {
private void vaultListChanged(@SuppressWarnings("unused") Observable observable) { private void vaultListChanged(@SuppressWarnings("unused") Observable observable) {
assert Platform.isFxApplicationThread(); assert Platform.isFxApplicationThread();
trayMenu.updateTrayIcon(getAppropriateTrayIconImage()); trayMenu.updateTrayIcon(loader -> {
switch (loader) {
case TrayIconLoader.PngData l -> l.loadPng(getAppropriateTrayIconImage());
case TrayIconLoader.FreedesktopIconName l -> l.lookupByName(getAppropriateFreedesktopIconName());
}
});
rebuildMenu(); rebuildMenu();
} }
@@ -173,4 +184,8 @@ public class TrayMenuBuilder {
} }
} }
private String getAppropriateFreedesktopIconName() {
boolean isAnyVaultUnlocked = vaults.stream().anyMatch(Vault::isUnlocked);
return isAnyVaultUnlocked ? "org.cryptomator.Cryptomator.tray-unlocked-symbolic" : "org.cryptomator.Cryptomator.tray-symbolic";
}
} }
@@ -1,7 +1,12 @@
package org.cryptomator.ui.unlock; package org.cryptomator.ui.unlock;
import org.cryptomator.common.ObservableUtil;
import org.cryptomator.common.mount.HideawayNotDirectoryException;
import org.cryptomator.common.mount.IllegalMountPointException;
import org.cryptomator.common.mount.MountPointCleanupFailedException;
import org.cryptomator.common.mount.MountPointInUseException; import org.cryptomator.common.mount.MountPointInUseException;
import org.cryptomator.common.mount.MountPointNotExistsException; import org.cryptomator.common.mount.MountPointNotEmptyDirectoryException;
import org.cryptomator.common.mount.MountPointNotExistingException;
import org.cryptomator.common.mount.MountPointNotSupportedException; import org.cryptomator.common.mount.MountPointNotSupportedException;
import org.cryptomator.common.vaults.Vault; import org.cryptomator.common.vaults.Vault;
import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.FxController;
@@ -9,12 +14,15 @@ import org.cryptomator.ui.controls.FormattedLabel;
import org.cryptomator.ui.fxapp.FxApplicationWindows; import org.cryptomator.ui.fxapp.FxApplicationWindows;
import org.cryptomator.ui.preferences.SelectedPreferencesTab; import org.cryptomator.ui.preferences.SelectedPreferencesTab;
import org.cryptomator.ui.vaultoptions.SelectedVaultOptionsTab; import org.cryptomator.ui.vaultoptions.SelectedVaultOptionsTab;
import org.jetbrains.annotations.PropertyKey;
import javax.inject.Inject; import javax.inject.Inject;
import javafx.beans.property.ObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.nio.file.Path;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.concurrent.atomic.AtomicReference;
//At the current point in time only the CustomMountPointChooser may cause this window to be shown. //At the current point in time only the CustomMountPointChooser may cause this window to be shown.
@UnlockScoped @UnlockScoped
@@ -23,28 +31,31 @@ public class UnlockInvalidMountPointController implements FxController {
private final Stage window; private final Stage window;
private final Vault vault; private final Vault vault;
private final FxApplicationWindows appWindows; private final FxApplicationWindows appWindows;
private final ResourceBundle resourceBundle;
private final ExceptionType exceptionType; private final ObservableValue<ExceptionType> exceptionType;
private final String exceptionMessage; private final ObservableValue<Path> exceptionPath;
private final ObservableValue<String> exceptionMessage;
private final ObservableValue<Path> hideawayPath;
private final ObservableValue<String> format;
private final ObservableValue<Boolean> showPreferences;
private final ObservableValue<Boolean> showVaultOptions;
public FormattedLabel dialogDescription; public FormattedLabel dialogDescription;
@Inject @Inject
UnlockInvalidMountPointController(@UnlockWindow Stage window, @UnlockWindow Vault vault, @UnlockWindow AtomicReference<Throwable> unlockException, FxApplicationWindows appWindows, ResourceBundle resourceBundle) { UnlockInvalidMountPointController(@UnlockWindow Stage window, @UnlockWindow Vault vault, @UnlockWindow ObjectProperty<IllegalMountPointException> illegalMountPointException, FxApplicationWindows appWindows, ResourceBundle resourceBundle) {
this.window = window; this.window = window;
this.vault = vault; this.vault = vault;
this.appWindows = appWindows; this.appWindows = appWindows;
this.resourceBundle = resourceBundle;
var exc = unlockException.get(); this.exceptionType = illegalMountPointException.map(this::getExceptionType);
this.exceptionType = getExceptionType(exc); this.exceptionPath = illegalMountPointException.map(IllegalMountPointException::getMountpoint);
this.exceptionMessage = exc.getMessage(); this.exceptionMessage = illegalMountPointException.map(IllegalMountPointException::getMessage);
} this.hideawayPath = illegalMountPointException.map(e -> e instanceof HideawayNotDirectoryException haeExc ? haeExc.getHideaway() : null);
@FXML this.format = ObservableUtil.mapWithDefault(exceptionType, type -> resourceBundle.getString(type.translationKey), "");
public void initialize() { this.showPreferences = ObservableUtil.mapWithDefault(exceptionType, type -> type.action == ButtonAction.SHOW_PREFERENCES, false);
dialogDescription.setFormat(resourceBundle.getString(exceptionType.translationKey)); this.showVaultOptions = ObservableUtil.mapWithDefault(exceptionType, type -> type.action == ButtonAction.SHOW_VAULT_OPTIONS, false);
dialogDescription.setArg1(exceptionMessage);
} }
@FXML @FXML
@@ -67,8 +78,11 @@ public class UnlockInvalidMountPointController implements FxController {
private ExceptionType getExceptionType(Throwable unlockException) { private ExceptionType getExceptionType(Throwable unlockException) {
return switch (unlockException) { return switch (unlockException) {
case MountPointNotSupportedException x -> ExceptionType.NOT_SUPPORTED; case MountPointNotSupportedException x -> ExceptionType.NOT_SUPPORTED;
case MountPointNotExistsException x -> ExceptionType.NOT_EXISTING; case MountPointNotExistingException x -> ExceptionType.NOT_EXISTING;
case MountPointInUseException x -> ExceptionType.IN_USE; case MountPointInUseException x -> ExceptionType.IN_USE;
case HideawayNotDirectoryException x -> ExceptionType.HIDEAWAY_NOT_DIR;
case MountPointCleanupFailedException x -> ExceptionType.COULD_NOT_BE_CLEARED;
case MountPointNotEmptyDirectoryException x -> ExceptionType.NOT_EMPTY_DIRECTORY;
default -> ExceptionType.GENERIC; default -> ExceptionType.GENERIC;
}; };
} }
@@ -78,12 +92,15 @@ public class UnlockInvalidMountPointController implements FxController {
NOT_SUPPORTED("unlock.error.customPath.description.notSupported", ButtonAction.SHOW_PREFERENCES), NOT_SUPPORTED("unlock.error.customPath.description.notSupported", ButtonAction.SHOW_PREFERENCES),
NOT_EXISTING("unlock.error.customPath.description.notExists", ButtonAction.SHOW_VAULT_OPTIONS), NOT_EXISTING("unlock.error.customPath.description.notExists", ButtonAction.SHOW_VAULT_OPTIONS),
IN_USE("unlock.error.customPath.description.inUse", ButtonAction.SHOW_VAULT_OPTIONS), IN_USE("unlock.error.customPath.description.inUse", ButtonAction.SHOW_VAULT_OPTIONS),
HIDEAWAY_NOT_DIR("unlock.error.customPath.description.hideawayNotDir", ButtonAction.SHOW_VAULT_OPTIONS),
COULD_NOT_BE_CLEARED("unlock.error.customPath.description.couldNotBeCleaned", ButtonAction.SHOW_VAULT_OPTIONS),
NOT_EMPTY_DIRECTORY("unlock.error.customPath.description.notEmptyDir", ButtonAction.SHOW_VAULT_OPTIONS),
GENERIC("unlock.error.customPath.description.generic", ButtonAction.SHOW_PREFERENCES); GENERIC("unlock.error.customPath.description.generic", ButtonAction.SHOW_PREFERENCES);
private final String translationKey; private final String translationKey;
private final ButtonAction action; private final ButtonAction action;
ExceptionType(String translationKey, ButtonAction action) { ExceptionType(@PropertyKey(resourceBundle = "i18n.strings") String translationKey, ButtonAction action) {
this.translationKey = translationKey; this.translationKey = translationKey;
this.action = action; this.action = action;
} }
@@ -91,6 +108,7 @@ public class UnlockInvalidMountPointController implements FxController {
private enum ButtonAction { private enum ButtonAction {
//TODO Add option to show filesystem, e.g. for ExceptionType.HIDEAWAY_EXISTS
SHOW_PREFERENCES, SHOW_PREFERENCES,
SHOW_VAULT_OPTIONS; SHOW_VAULT_OPTIONS;
@@ -98,11 +116,51 @@ public class UnlockInvalidMountPointController implements FxController {
/* Getter */ /* Getter */
public boolean isShowPreferences() { public Path getExceptionPath() {
return exceptionType.action == ButtonAction.SHOW_PREFERENCES; return exceptionPath.getValue();
} }
public boolean isShowVaultOptions() { public ObservableValue<Path> exceptionPathProperty() {
return exceptionType.action == ButtonAction.SHOW_VAULT_OPTIONS; return exceptionPath;
}
public String getFormat() {
return format.getValue();
}
public ObservableValue<String> formatProperty() {
return format;
}
public String getExceptionMessage() {
return exceptionMessage.getValue();
}
public ObservableValue<String> exceptionMessageProperty() {
return exceptionMessage;
}
public Path getHideawayPath() {
return hideawayPath.getValue();
}
public ObservableValue<Path> hideawayPathProperty() {
return hideawayPath;
}
public Boolean getShowPreferences() {
return showPreferences.getValue();
}
public ObservableValue<Boolean> showPreferencesProperty() {
return showPreferences;
}
public Boolean getShowVaultOptions() {
return showVaultOptions.getValue();
}
public ObservableValue<Boolean> showVaultOptionsProperty() {
return showVaultOptions;
} }
} }
@@ -4,6 +4,7 @@ import dagger.Binds;
import dagger.Module; import dagger.Module;
import dagger.Provides; import dagger.Provides;
import dagger.multibindings.IntoMap; import dagger.multibindings.IntoMap;
import org.cryptomator.common.mount.IllegalMountPointException;
import org.cryptomator.common.vaults.Vault; import org.cryptomator.common.vaults.Vault;
import org.cryptomator.ui.common.DefaultSceneFactory; import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.FxController;
@@ -18,12 +19,13 @@ import org.jetbrains.annotations.Nullable;
import javax.inject.Named; import javax.inject.Named;
import javax.inject.Provider; import javax.inject.Provider;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.stage.Modality; import javafx.stage.Modality;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.util.Map; import java.util.Map;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.concurrent.atomic.AtomicReference;
@Module(subcomponents = {KeyLoadingComponent.class}) @Module(subcomponents = {KeyLoadingComponent.class})
abstract class UnlockModule { abstract class UnlockModule {
@@ -61,8 +63,8 @@ abstract class UnlockModule {
@Provides @Provides
@UnlockWindow @UnlockWindow
@UnlockScoped @UnlockScoped
static AtomicReference<Throwable> unlockException() { static ObjectProperty<IllegalMountPointException> illegalMountPointException() {
return new AtomicReference<>(); return new SimpleObjectProperty<>();
} }
@Provides @Provides
@@ -17,11 +17,11 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject; import javax.inject.Inject;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.beans.property.ObjectProperty;
import javafx.concurrent.Task; import javafx.concurrent.Task;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.io.IOException; import java.io.IOException;
import java.util.concurrent.atomic.AtomicReference;
/** /**
* A multi-step task that consists of background activities as well as user interaction. * A multi-step task that consists of background activities as well as user interaction.
@@ -40,10 +40,10 @@ public class UnlockWorkflow extends Task<Boolean> {
private final Lazy<Scene> invalidMountPointScene; private final Lazy<Scene> invalidMountPointScene;
private final FxApplicationWindows appWindows; private final FxApplicationWindows appWindows;
private final KeyLoadingStrategy keyLoadingStrategy; private final KeyLoadingStrategy keyLoadingStrategy;
private final AtomicReference<Throwable> unlockFailedException; private final ObjectProperty<IllegalMountPointException> illegalMountPointException;
@Inject @Inject
UnlockWorkflow(@UnlockWindow Stage window, @UnlockWindow Vault vault, VaultService vaultService, @FxmlScene(FxmlFile.UNLOCK_SUCCESS) Lazy<Scene> successScene, @FxmlScene(FxmlFile.UNLOCK_INVALID_MOUNT_POINT) Lazy<Scene> invalidMountPointScene, FxApplicationWindows appWindows, @UnlockWindow KeyLoadingStrategy keyLoadingStrategy, @UnlockWindow AtomicReference<Throwable> unlockFailedException) { UnlockWorkflow(@UnlockWindow Stage window, @UnlockWindow Vault vault, VaultService vaultService, @FxmlScene(FxmlFile.UNLOCK_SUCCESS) Lazy<Scene> successScene, @FxmlScene(FxmlFile.UNLOCK_INVALID_MOUNT_POINT) Lazy<Scene> invalidMountPointScene, FxApplicationWindows appWindows, @UnlockWindow KeyLoadingStrategy keyLoadingStrategy, @UnlockWindow ObjectProperty<IllegalMountPointException> illegalMountPointException) {
this.window = window; this.window = window;
this.vault = vault; this.vault = vault;
this.vaultService = vaultService; this.vaultService = vaultService;
@@ -51,7 +51,7 @@ public class UnlockWorkflow extends Task<Boolean> {
this.invalidMountPointScene = invalidMountPointScene; this.invalidMountPointScene = invalidMountPointScene;
this.appWindows = appWindows; this.appWindows = appWindows;
this.keyLoadingStrategy = keyLoadingStrategy; this.keyLoadingStrategy = keyLoadingStrategy;
this.unlockFailedException = unlockFailedException; this.illegalMountPointException = illegalMountPointException;
} }
@Override @Override
@@ -79,7 +79,7 @@ public class UnlockWorkflow extends Task<Boolean> {
private void handleIllegalMountPointError(IllegalMountPointException impe) { private void handleIllegalMountPointError(IllegalMountPointException impe) {
Platform.runLater(() -> { Platform.runLater(() -> {
unlockFailedException.set(impe); illegalMountPointException.set(impe);
window.setScene(invalidMountPointScene.get()); window.setScene(invalidMountPointScene.get());
window.show(); window.show();
}); });
+10
View File
@@ -795,6 +795,16 @@
-fx-scale-shape: false; -fx-scale-shape: false;
} }
/*******************************************************************************
* *
* Add Vault - MenuItem *
* *
******************************************************************************/
.add-vault-menu-item {
-fx-padding: 4px 8px;
}
/******************************************************************************* /*******************************************************************************
* * * *
* ProgressBar * * ProgressBar *
+10
View File
@@ -794,6 +794,16 @@
-fx-scale-shape: false; -fx-scale-shape: false;
} }
/*******************************************************************************
* *
* Add Vault - MenuItem *
* *
******************************************************************************/
.add-vault-menu-item {
-fx-padding: 4px 8px;
}
/******************************************************************************* /*******************************************************************************
* * * *
* ProgressBar * * ProgressBar *
@@ -24,9 +24,8 @@
<Region VBox.vgrow="ALWAYS"/> <Region VBox.vgrow="ALWAYS"/>
<ButtonBar buttonMinWidth="120" buttonOrder="B+X"> <ButtonBar buttonMinWidth="120" buttonOrder="+X">
<buttons> <buttons>
<Button text="%generic.button.back" ButtonBar.buttonData="BACK_PREVIOUS" onAction="#back"/>
<Button fx:id="finishButton" text="%addvaultwizard.existing.chooseBtn" ButtonBar.buttonData="NEXT_FORWARD" onAction="#chooseFileAndNext" defaultButton="true"/> <Button fx:id="finishButton" text="%addvaultwizard.existing.chooseBtn" ButtonBar.buttonData="NEXT_FORWARD" onAction="#chooseFileAndNext" defaultButton="true"/>
</buttons> </buttons>
</ButtonBar> </ButtonBar>
@@ -68,9 +68,8 @@
<Region VBox.vgrow="ALWAYS"/> <Region VBox.vgrow="ALWAYS"/>
<ButtonBar buttonMinWidth="120" buttonOrder="B+X"> <ButtonBar buttonMinWidth="120" buttonOrder="+X">
<buttons> <buttons>
<Button text="%generic.button.back" ButtonBar.buttonData="BACK_PREVIOUS" onAction="#back"/>
<Button text="%generic.button.next" ButtonBar.buttonData="NEXT_FORWARD" onAction="#next" defaultButton="true" disable="${!controller.validVaultName}"/> <Button text="%generic.button.next" ButtonBar.buttonData="NEXT_FORWARD" onAction="#next" defaultButton="true" disable="${!controller.validVaultName}"/>
</buttons> </buttons>
</ButtonBar> </ButtonBar>
@@ -1,44 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.Region?>
<?import javafx.scene.layout.VBox?>
<VBox xmlns:fx="http://javafx.com/fxml"
xmlns="http://javafx.com/javafx"
fx:controller="org.cryptomator.ui.addvaultwizard.AddVaultWelcomeController"
prefWidth="450"
prefHeight="450"
spacing="12"
alignment="TOP_CENTER">
<padding>
<Insets topRightBottomLeft="24"/>
</padding>
<children>
<Region VBox.vgrow="ALWAYS"/>
<ImageView VBox.vgrow="ALWAYS" fitHeight="128" preserveRatio="true" smooth="true" cache="true">
<Image url="@../img/logo.png"/>
</ImageView>
<Region VBox.vgrow="ALWAYS"/>
<VBox alignment="CENTER" spacing="9">
<Button styleClass="button-large" text="%addvaultwizard.welcome.newButton" onAction="#createNewVault" prefWidth="Infinity">
<graphic>
<FontAwesome5IconView glyph="MAGIC" glyphSize="15"/>
</graphic>
</Button>
<Button styleClass="button-large" text="%addvaultwizard.welcome.existingButton" onAction="#chooseExistingVault" prefWidth="Infinity">
<graphic>
<FontAwesome5IconView glyph="FOLDER_OPEN" glyphSize="15"/>
</graphic>
</Button>
</VBox>
<Region VBox.vgrow="ALWAYS"/>
</children>
</VBox>
+31 -19
View File
@@ -32,25 +32,37 @@
</StackPane> </StackPane>
<VBox spacing="6" HBox.hgrow="ALWAYS"> <VBox spacing="6" HBox.hgrow="ALWAYS">
<FormattedLabel styleClass="label-extra-large" format="%error.message" arg1="${controller.errorCode}"/> <FormattedLabel styleClass="label-extra-large" format="%error.message" arg1="${controller.errorCode}"/>
<FontAwesome5Spinner glyphSize="24" visible="${controller.isLoadingHttpResponse}" managed="${controller.isLoadingHttpResponse}"/> <VBox visible="${!controller.askedForLookupDatabasePermission}" managed="${!controller.askedForLookupDatabasePermission}">
<VBox visible="${!controller.isLoadingHttpResponse}" managed="${!controller.isLoadingHttpResponse}"> <Label text="%error.lookupPermissionMessage" wrapText="true"/>
<Label text="%error.existingSolutionDescription" wrapText="true" visible="${controller.errorSolutionFound}" managed="${controller.errorSolutionFound}"/> <Region VBox.vgrow="ALWAYS" minHeight="18"/>
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.solution" onAction="#showSolution" contentDisplay="LEFT" visible="${controller.errorSolutionFound}" managed="${controller.errorSolutionFound}"> <ButtonBar buttonMinWidth="120" buttonOrder="+NY">
<graphic> <buttons>
<FontAwesome5IconView glyph="LINK" glyphSize="12"/> <Button text="%error.dismiss" ButtonBar.buttonData="NO" onAction="#dismiss"/>
</graphic> <Button text="%error.lookUpSolution" ButtonBar.buttonData="YES" defaultButton="true" onAction="#lookUpSolution"/>
</Hyperlink> </buttons>
<Label text="%error.description" wrapText="true" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}"/> </ButtonBar>
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.lookup" onAction="#searchError" contentDisplay="LEFT" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}"> </VBox>
<graphic> <VBox visible="${controller.askedForLookupDatabasePermission}" managed="${controller.askedForLookupDatabasePermission}">
<FontAwesome5IconView glyph="LINK" glyphSize="12"/> <FontAwesome5Spinner glyphSize="24" visible="${controller.isLoadingHttpResponse}" managed="${controller.isLoadingHttpResponse}"/>
</graphic> <VBox visible="${!controller.isLoadingHttpResponse}" managed="${!controller.isLoadingHttpResponse}">
</Hyperlink> <Label text="%error.existingSolutionDescription" wrapText="true" visible="${controller.errorSolutionFound}" managed="${controller.errorSolutionFound}"/>
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.report" onAction="#reportError" contentDisplay="LEFT" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}"> <Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.solution" onAction="#showSolution" contentDisplay="LEFT" visible="${controller.errorSolutionFound}" managed="${controller.errorSolutionFound}">
<graphic> <graphic>
<FontAwesome5IconView glyph="LINK" glyphSize="12"/> <FontAwesome5IconView glyph="LINK" glyphSize="12"/>
</graphic> </graphic>
</Hyperlink> </Hyperlink>
<Label text="%error.description" wrapText="true" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}"/>
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.lookup" onAction="#searchError" contentDisplay="LEFT" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}">
<graphic>
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
</graphic>
</Hyperlink>
<Hyperlink styleClass="hyperlink-underline" text="%error.hyperlink.report" onAction="#reportError" contentDisplay="LEFT" visible="${!controller.errorSolutionFound}" managed="${!controller.errorSolutionFound}">
<graphic>
<FontAwesome5IconView glyph="LINK" glyphSize="12"/>
</graphic>
</Hyperlink>
</VBox>
</VBox> </VBox>
</VBox> </VBox>
</HBox> </HBox>
@@ -40,7 +40,7 @@
</padding> </padding>
</Label> </Label>
<FormattedLabel fx:id="dialogDescription" wrapText="true" textAlignment="LEFT"/> <FormattedLabel fx:id="dialogDescription" wrapText="true" textAlignment="LEFT" format="${controller.format}" arg1="${controller.exceptionPath}" arg2="${controller.exceptionMessage}" arg3="${controller.hideawayPath}"/>
<Region VBox.vgrow="ALWAYS" minHeight="18"/> <Region VBox.vgrow="ALWAYS" minHeight="18"/>
<ButtonBar buttonMinWidth="120" buttonOrder="+CI"> <ButtonBar buttonMinWidth="120" buttonOrder="+CI">
+20 -2
View File
@@ -8,6 +8,8 @@
<?import javafx.scene.layout.StackPane?> <?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?> <?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.Arc?> <?import javafx.scene.shape.Arc?>
<?import javafx.scene.control.ContextMenu?>
<?import javafx.scene.control.MenuItem?>
<StackPane xmlns:fx="http://javafx.com/fxml" <StackPane xmlns:fx="http://javafx.com/fxml"
xmlns="http://javafx.com/javafx" xmlns="http://javafx.com/javafx"
fx:id="root" fx:id="root"
@@ -26,10 +28,26 @@
<Arc VBox.vgrow="NEVER" styleClass="onboarding-overlay-arc" type="OPEN" centerX="50" centerY="0" radiusY="100" radiusX="50" startAngle="0" length="-60" strokeWidth="1"/> <Arc VBox.vgrow="NEVER" styleClass="onboarding-overlay-arc" type="OPEN" centerX="50" centerY="0" radiusY="100" radiusX="50" startAngle="0" length="-60" strokeWidth="1"/>
</VBox> </VBox>
</StackPane> </StackPane>
<Button styleClass="toolbar-button" text="%main.vaultlist.addVaultBtn" onAction="#didClickAddVault" alignment="BASELINE_CENTER" maxWidth="Infinity"> <Button fx:id="addVaultBtn" onAction="#showMenu" styleClass="toolbar-button" text="%main.vaultlist.addVaultBtn" alignment="BASELINE_CENTER" maxWidth="Infinity" contentDisplay="RIGHT">
<graphic> <graphic>
<FontAwesome5IconView glyph="PLUS"/> <FontAwesome5IconView glyph="CARET_DOWN"/>
</graphic> </graphic>
<contextMenu>
<ContextMenu>
<items>
<MenuItem styleClass="add-vault-menu-item" text="%main.vaultlist.addVaultBtn.menuItemNew" onAction="#didClickAddNewVault" >
<graphic>
<FontAwesome5IconView glyph="PLUS" textAlignment="CENTER" wrappingWidth="14" />
</graphic>
</MenuItem>
<MenuItem styleClass="add-vault-menu-item" text="%main.vaultlist.addVaultBtn.menuItemExisting" onAction="#didClickAddExistingVault" >
<graphic>
<FontAwesome5IconView glyph="FOLDER_OPEN" textAlignment="CENTER" wrappingWidth="14" />
</graphic>
</MenuItem>
</items>
</ContextMenu>
</contextMenu>
</Button> </Button>
</VBox> </VBox>
<Region styleClass="drag-n-drop-border" visible="${controller.draggingVaultOver}"/> <Region styleClass="drag-n-drop-border" visible="${controller.draggingVaultOver}"/>
+13 -7
View File
@@ -23,7 +23,9 @@ error.hyperlink.report=Report this error
error.technicalDetails=Details: error.technicalDetails=Details:
error.existingSolutionDescription=Cryptomator didn't expect this to happen. But we found an existing solution for this error. Please take a look at the following link. error.existingSolutionDescription=Cryptomator didn't expect this to happen. But we found an existing solution for this error. Please take a look at the following link.
error.hyperlink.solution=Look up the solution error.hyperlink.solution=Look up the solution
error.lookupPermissionMessage=Cryptomator can look up a solution for this problem online. This will send a request to our problem database from your IP address.
error.dismiss=Dismiss
error.lookUpSolution=Look up Solution
# Defaults # Defaults
defaults.vault.vaultName=Vault defaults.vault.vaultName=Vault
@@ -39,10 +41,8 @@ traymenu.vault.reveal=Reveal
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Add Vault addvaultwizard.title=Add Vault
## Welcome
addvaultwizard.welcome.newButton=Create New Vault
addvaultwizard.welcome.existingButton=Open Existing Vault
## New ## New
addvaultwizard.new.title=Add New Vault
### Name ### Name
addvaultwizard.new.nameInstruction=Choose a name for the vault addvaultwizard.new.nameInstruction=Choose a name for the vault
addvaultwizard.new.namePrompt=Vault Name addvaultwizard.new.namePrompt=Vault Name
@@ -92,6 +92,7 @@ addvault.new.readme.accessLocation.2=This is your vault's access location.
addvault.new.readme.accessLocation.3=Any files added to this volume will be encrypted by Cryptomator. You can work on it like on any other drive/folder. This is only a decrypted view of its content, your files stay encrypted on your hard drive all the time. addvault.new.readme.accessLocation.3=Any files added to this volume will be encrypted by Cryptomator. You can work on it like on any other drive/folder. This is only a decrypted view of its content, your files stay encrypted on your hard drive all the time.
addvault.new.readme.accessLocation.4=Feel free to remove this file. addvault.new.readme.accessLocation.4=Feel free to remove this file.
## Existing ## Existing
addvaultwizard.existing.title=Add Existing Vault
addvaultwizard.existing.instruction=Choose the "vault.cryptomator" file of your existing vault. If only a file named "masterkey.cryptomator" exists, select that instead. addvaultwizard.existing.instruction=Choose the "vault.cryptomator" file of your existing vault. If only a file named "masterkey.cryptomator" exists, select that instead.
addvaultwizard.existing.chooseBtn=Choose… addvaultwizard.existing.chooseBtn=Choose…
addvaultwizard.existing.filePickerTitle=Select Vault File addvaultwizard.existing.filePickerTitle=Select Vault File
@@ -136,8 +137,11 @@ unlock.success.revealBtn=Reveal Drive
unlock.error.customPath.message=Unable to mount vault to custom path unlock.error.customPath.message=Unable to mount vault to custom path
unlock.error.customPath.description.notSupported=If you wish to keep using the custom path, please go to the preferences and select a volume type that supports it. Otherwise, go to the vault options and choose a supported mount point. unlock.error.customPath.description.notSupported=If you wish to keep using the custom path, please go to the preferences and select a volume type that supports it. Otherwise, go to the vault options and choose a supported mount point.
unlock.error.customPath.description.notExists=The custom mount path does not exist. Either create it in your local filesystem or change it in the vault options. unlock.error.customPath.description.notExists=The custom mount path does not exist. Either create it in your local filesystem or change it in the vault options.
unlock.error.customPath.description.inUse=Drive letter "%s" is already in use. unlock.error.customPath.description.inUse=The drive letter or custom mount path "%s" is already in use.
unlock.error.customPath.description.generic=You have selected a custom mount path for this vault, but using it failed with the message: %s unlock.error.customPath.description.hideawayNotDir=The temporary, hidden file "%3$s" used for unlocking could not be removed. Please check the file and then delete it manually.
unlock.error.customPath.description.couldNotBeCleaned=Your vault could not be mounted to the path "%s". Please try again or choose a different path.
unlock.error.customPath.description.notEmptyDir=The custom mount path "%s" is not an empty folder. Please choose an empty folder and try again.
unlock.error.customPath.description.generic=You have selected a custom mount path for this vault, but using it failed with the message: %2$s
## Hub ## Hub
hub.noKeychain.message=Unable to access device key hub.noKeychain.message=Unable to access device key
hub.noKeychain.description=In order to unlock Hub vaults, a device key is required, which is secured using a keychain. To proceed, enable “%s” and select a keychain in the preferences. hub.noKeychain.description=In order to unlock Hub vaults, a device key is required, which is secured using a keychain. To proceed, enable “%s” and select a keychain in the preferences.
@@ -362,7 +366,9 @@ main.vaultlist.contextMenu.unlock=Unlock…
main.vaultlist.contextMenu.unlockNow=Unlock Now main.vaultlist.contextMenu.unlockNow=Unlock Now
main.vaultlist.contextMenu.vaultoptions=Show Vault Options main.vaultlist.contextMenu.vaultoptions=Show Vault Options
main.vaultlist.contextMenu.reveal=Reveal Drive main.vaultlist.contextMenu.reveal=Reveal Drive
main.vaultlist.addVaultBtn=Add Vault main.vaultlist.addVaultBtn=Add
main.vaultlist.addVaultBtn.menuItemNew=New Vault...
main.vaultlist.addVaultBtn.menuItemExisting=Existing Vault...
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Thanks for choosing Cryptomator to protect your files. If you need any assistance, check out our getting started guides: main.vaultDetail.welcomeOnboarding=Thanks for choosing Cryptomator to protect your files. If you need any assistance, check out our getting started guides:
+113 -12
View File
@@ -4,7 +4,7 @@
## Button ## Button
generic.button.apply=تطبيق generic.button.apply=تطبيق
generic.button.back=رجوع generic.button.back=رجوع
generic.button.cancel=الغاء generic.button.cancel=إلغاء
generic.button.change=تغيير generic.button.change=تغيير
generic.button.choose=اختر… generic.button.choose=اختر…
generic.button.close=إغلاق generic.button.close=إغلاق
@@ -16,13 +16,22 @@ generic.button.print=طباعة
# Error # Error
error.message=حدث خطأ ما error.message=حدث خطأ ما
error.description=لم يتوقع "كريبتوماتور" حدوث ذلك. يمكنك البحث عن الحلول الموجودة لهذا الخطأ. وإذا لم يتم الإبلاغ عنه بعد، لا تتردد في فعل ذلك.
error.hyperlink.lookup=ابحث عن هذا الخطأ
error.hyperlink.report=أبلغ عن هذا الخطأ
error.technicalDetails=التفاصيل:
error.existingSolutionDescription=لم يتوقع "كريبتوماتور" حدوث ذلك. لكننا وجدنا حلا لهذا الخطأ. يرجى إلقاء نظرة على الرابط التالي.
error.hyperlink.solution=ابحث عن الحل
error.lookupPermissionMessage=يمكن لـ Cryptomator البحث عن حل لهذه المشكلة على الإنترنت. هذا سيرسل طلب إلى قاعدة بيانات مشكلتنا من عنوان IP الخاص بك.
error.dismiss=تجاهل
error.lookUpSolution=البحث عن حل
# Defaults # Defaults
defaults.vault.vaultName=مخزن defaults.vault.vaultName=الخزينة
# Tray Menu # Tray Menu
traymenu.showMainWindow=اظهار traymenu.showMainWindow=عرض
traymenu.showPreferencesWindow=تفضيلات traymenu.showPreferencesWindow=التفضيلات
traymenu.lockAllVaults=تأمين الكل traymenu.lockAllVaults=تأمين الكل
traymenu.quitApplication=انهاء traymenu.quitApplication=انهاء
traymenu.vault.unlock=افتح traymenu.vault.unlock=افتح
@@ -31,13 +40,10 @@ traymenu.vault.reveal=إظهار
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=أضِف مخزنًا addvaultwizard.title=أضِف مخزنًا
## Welcome
addvaultwizard.welcome.newButton=إنشاء مخزن جديد
addvaultwizard.welcome.existingButton=افتح مخزن موجود
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=اختر اسم للمخزن addvaultwizard.new.nameInstruction=اختر اسم للمخزن
addvaultwizard.new.namePrompt=اسم المخزن addvaultwizard.new.namePrompt=اسم الخزينة
### Location ### Location
addvaultwizard.new.locationInstruction=أين يجب على Cryptomator تخزين الملفات المشفرة للمخزن الخاص بك؟ addvaultwizard.new.locationInstruction=أين يجب على Cryptomator تخزين الملفات المشفرة للمخزن الخاص بك؟
addvaultwizard.new.locationLabel=موقع التخزين addvaultwizard.new.locationLabel=موقع التخزين
@@ -49,6 +55,18 @@ addvaultwizard.new.fileAlreadyExists=ملف أو مجلد بنفس اسم الم
addvaultwizard.new.locationDoesNotExist=المجلد في المسار المحدد غير موجود أو لا يمكن الوصول إليه addvaultwizard.new.locationDoesNotExist=المجلد في المسار المحدد غير موجود أو لا يمكن الوصول إليه
addvaultwizard.new.locationIsNotWritable=لا يوجد صلاحيات للكتابة على المسار المحدد addvaultwizard.new.locationIsNotWritable=لا يوجد صلاحيات للكتابة على المسار المحدد
addvaultwizard.new.locationIsOk=الموقع المناسب للمخزن الخاص بك addvaultwizard.new.locationIsOk=الموقع المناسب للمخزن الخاص بك
addvaultwizard.new.invalidName=اسم المخزن غير صالح
addvaultwizard.new.validName=اسم المخزن صالح
addvaultwizard.new.validCharacters.message=قد يحتوي اسم المخزن على الأحرف التالية:
addvaultwizard.new.validCharacters.chars=أحرف الكلمات (أمثلة: a, ж, 수)
addvaultwizard.new.validCharacters.numbers=الأعداد
addvaultwizard.new.validCharacters.dashes=الشرطة (%s) أو الشرطة السفلية (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=تمكين إعدادات الخبراء
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=أدخل قيمة بين 36 و 220 (الافتراضي 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=افتح وثائق الدعم لمعرفة المزيد.
addvaultwizard.new.expertSettings.shorteningThreshold.title=الحد الأقصى لطول أسماء الملفات المشفرة
addvaultwizard.new.expertSettings.shorteningThreshold.valid=صالح
### Password ### Password
addvaultwizard.new.createVaultBtn=إنشاء المخزن addvaultwizard.new.createVaultBtn=إنشاء المخزن
addvaultwizard.new.generateRecoveryKeyChoice=لن تتمكن من الوصول إلى بياناتك بدون كلمة المرور الخاصة بك. هل تريد مفتاح استرداد في حالة فقدان كلمة المرور الخاصة بك؟ addvaultwizard.new.generateRecoveryKeyChoice=لن تتمكن من الوصول إلى بياناتك بدون كلمة المرور الخاصة بك. هل تريد مفتاح استرداد في حالة فقدان كلمة المرور الخاصة بك؟
@@ -56,7 +74,7 @@ addvaultwizard.new.generateRecoveryKeyChoice.yes=نعم من فضلك، أن ت
addvaultwizard.new.generateRecoveryKeyChoice.no=لا شكراً، لن أفقد كلمة المرور الخاصة بي addvaultwizard.new.generateRecoveryKeyChoice.no=لا شكراً، لن أفقد كلمة المرور الخاصة بي
### Information ### Information
addvault.new.readme.storageLocation.fileName=هام.rtf addvault.new.readme.storageLocation.fileName=هام.rtf
addvault.new.readme.storageLocation.1=⚠️ ملفات الخزنة ⚠️ addvault.new.readme.storageLocation.1=⚠️ ملفات الخزينة ⚠️
addvault.new.readme.storageLocation.2=هذا هو موقع تخزين الخزنة الخاصة بك. addvault.new.readme.storageLocation.2=هذا هو موقع تخزين الخزنة الخاصة بك.
addvault.new.readme.storageLocation.3=لا تفعل addvault.new.readme.storageLocation.3=لا تفعل
addvault.new.readme.storageLocation.4=• تغيير أي ملفات داخل هذا الدليل أو addvault.new.readme.storageLocation.4=• تغيير أي ملفات داخل هذا الدليل أو
@@ -72,13 +90,17 @@ addvault.new.readme.accessLocation.2=هذا هو موقع الوصول للخر
addvault.new.readme.accessLocation.3=سيتم تشفير أي ملفات تضاف إلى هذا المجلد من قبل Cryptomator. يمكنك العمل عليه كأي مجلد آخر. هذه فقط طريقة عرض غير مشفرة لمحتوياتها، ملفاتك تبقى مشفرة على القرص الصلب الخاص بك طوال الوقت. addvault.new.readme.accessLocation.3=سيتم تشفير أي ملفات تضاف إلى هذا المجلد من قبل Cryptomator. يمكنك العمل عليه كأي مجلد آخر. هذه فقط طريقة عرض غير مشفرة لمحتوياتها، ملفاتك تبقى مشفرة على القرص الصلب الخاص بك طوال الوقت.
addvault.new.readme.accessLocation.4=لا تتردد في إزالة هذا الملف. addvault.new.readme.accessLocation.4=لا تتردد في إزالة هذا الملف.
## Existing ## Existing
addvaultwizard.existing.instruction=اختر ملف "vault.cryptomator" من خزينتك الحالية. إذا كان يوجد فقط ملف اسمه "masterkey.cryptomator"، اختره عوضاً عنه.
addvaultwizard.existing.chooseBtn=اختر… addvaultwizard.existing.chooseBtn=اختر…
addvaultwizard.existing.filePickerTitle=حدد مِلَفّ المخزن
addvaultwizard.existing.filePickerMimeDesc=مخزن Cryptomator
## Success ## Success
addvaultwizard.success.nextStepsInstructions=تم إضافة مخزن "%s".\nتحتاج إلى فتح هذا المخزن للوصول أو إضافة محتويات إليه. بدلاً من ذلك، يمكنك فتحه في أي وقت لاحق. addvaultwizard.success.nextStepsInstructions=تم إضافة مخزن "%s".\nتحتاج إلى فتح هذا المخزن للوصول أو إضافة محتويات إليه. بدلاً من ذلك، يمكنك فتحه في أي وقت لاحق.
addvaultwizard.success.unlockNow=افتح الان addvaultwizard.success.unlockNow=افتح الان
# Remove Vault # Remove Vault
removeVault.title=احذف الحافظة removeVault.title=احذف الحافظة
removeVault.message=حذف المخزن؟
removeVault.description=سيؤدي هذا إلى نسيان Cryptomator لهذا المخزن فقط. يمكنك إضافته مرة أخرى لاحقاً. لن يتم حذف أي من الملفات المشفرة من القرص الصلب الخاص بك. removeVault.description=سيؤدي هذا إلى نسيان Cryptomator لهذا المخزن فقط. يمكنك إضافته مرة أخرى لاحقاً. لن يتم حذف أي من الملفات المشفرة من القرص الصلب الخاص بك.
removeVault.confirmBtn=احذف الحافظة removeVault.confirmBtn=احذف الحافظة
@@ -89,34 +111,69 @@ changepassword.finalConfirmation=أتفهم أنني لن أتمكن من الو
# Forget Password # Forget Password
forgetPassword.title=نسيت كلمة المرور forgetPassword.title=نسيت كلمة المرور
forgetPassword.message=نسيت كلمة المرور؟
forgetPassword.description=سيؤدي هذا إلى حذف كلمة المرور المحفوظة لهذا المخزن من سلسلة مفاتيح النظام الخاص بك. forgetPassword.description=سيؤدي هذا إلى حذف كلمة المرور المحفوظة لهذا المخزن من سلسلة مفاتيح النظام الخاص بك.
forgetPassword.confirmBtn=نسيت كلمة المرور forgetPassword.confirmBtn=نسيت كلمة المرور
# Unlock # Unlock
unlock.title=فتح "%s"
unlock.passwordPrompt=‮أدخل كلمة السر لـ "%s": unlock.passwordPrompt=‮أدخل كلمة السر لـ "%s":
unlock.savePassword=تذكر كلمة المرور unlock.savePassword=تذكر كلمة المرور
unlock.unlockBtn=افتح unlock.unlockBtn=افتح
## Select ## Select
unlock.chooseMasterkey.message=لم يتم العثور على مفتاح التشفير الرئيسي
unlock.chooseMasterkey.description=لم يتمكن Cryptomator من العثور على مفتاح التشفير الرئيسي للمخزن "%s". الرجاء اختيار الملف يدوياً.
unlock.chooseMasterkey.filePickerTitle=اختر ملف الـ Masterkey unlock.chooseMasterkey.filePickerTitle=اختر ملف الـ Masterkey
unlock.chooseMasterkey.filePickerMimeDesc=مفتاح التشفير الرئيسي في Cryptomator
## Success ## Success
unlock.success.message=تم الفتح بنجاح
unlock.success.description=تم فتح "%s" بنجاح! يمكنك الآن الوصول لمخزنك عن طريق القرص الافتراضي الخاص به. unlock.success.description=تم فتح "%s" بنجاح! يمكنك الآن الوصول لمخزنك عن طريق القرص الافتراضي الخاص به.
unlock.success.rememberChoice=تذكر اختياري ولا تظهر هذا مرة أخرى unlock.success.rememberChoice=تذكر اختياري ولا تظهر هذا مرة أخرى
unlock.success.revealBtn=اظهار القرص unlock.success.revealBtn=اظهار القرص
## Failure ## Failure
unlock.error.customPath.message=غير قادر على تركيب المخزن إلى المسار المخصص
unlock.error.customPath.description.notSupported=إذا كنت ترغب في الاستمرار في استخدام المسار المخصص، يرجى الذَّهاب إلى التفضيلات وتحديد نوع واسطة التخزين الذي يدعمها. خلاف ذلك، انتقل إلى خيارات المخزن واختر نقطة تركيب مدعومة.
unlock.error.customPath.description.notExists=مسار التركيب المخصص غير موجود. قم بإنشائه في نظام الملفات المحلي الخاص بك أو اختر غيره في خيارات الخزانة.
unlock.error.customPath.description.inUse=حرف القرص أو مسار التركيب المخصص "%s" قيد الاستخدام بالفعل.
unlock.error.customPath.description.couldNotBeCleaned=لا يمكن تركيب خزانتك على المسار "%s". الرجاء المحاولة مرة أخرى أو اختيار مسار مختلف.
unlock.error.customPath.description.notEmptyDir=مسار التركيب المخصص "%s" ليس مجلد فارغ. الرجاء اختيار مجلد فارغ وحاول مرة أخرى.
unlock.error.customPath.description.generic=لقد اخترت مسار تركيب مخصص لهذه الخزانة، ولكن استخدامه فشل مع الرسالة: %2$s
## Hub ## Hub
hub.noKeychain.message=غير قادر على الوصول إلى مفتاح الجهاز
hub.noKeychain.description=من أجل فتح مركز مخازن، مطلوب مفتاح جهاز، يتم تأمينه باستخدام سلسلة مفاتيح. للمضي قدما، قم بتمكين "%s" واختر سلسلة مفاتيح في التفضيلات.
hub.noKeychain.openBtn=فتح التفضيلات
### Waiting ### Waiting
hub.auth.message=جاري الانتظار للمصادقة…
hub.auth.description=يجب أن يتم إعادة توجيهك تلقائياً إلى صفحة تسجيل الدخول.
hub.auth.loginLink=لم يتم إعادة توجيهك؟ انقر هنا لفتحه.
### Receive Key ### Receive Key
hub.receive.message=معالجة الاستجابة…
hub.receive.description=Cryptomator يتلقى ويعالج الاستجابة من المركز. الرجاء الانتظار.
### Register Device ### Register Device
hub.register.message=اسم الجهاز متطلب
hub.register.description=يبدو أن هذا هو أول وصول للمركز من هذا الجهاز. من أجل تحديده للحصول على إذن الوصول، تحتاج إلى تسمية هذا الجهاز.
hub.register.nameLabel=اسم الجهاز
hub.register.occupiedMsg=الاسم مستخدم مسبقاً
hub.register.registerBtn=تأكيد hub.register.registerBtn=تأكيد
### Registration Success ### Registration Success
hub.registerSuccess.message=تم تسمية الجهاز
hub.registerSuccess.description=للدخول إلى الخزينة، يحتاج جهازك إلى إذن من مالك الخزينة.
### Registration Failed ### Registration Failed
hub.registerFailed.message=أخفق في تسمية الجهاز
hub.registerFailed.description=خطأ في عملية التسمية. لمزيد من التفاصيل، انظر إلى سجل التطبيق.
### Unauthorized ### Unauthorized
hub.unauthorized.message=تم رفض الوصول
hub.unauthorized.description=لم يتم بعد منح الإذن لجهازك بالوصول إلى هذا المخزن. اطلب من مالك المخزن أن يأذن بذلك.
### License Exceeded ### License Exceeded
hub.invalidLicense.message=ترخيص المركز غير صالح
hub.invalidLicense.description=نموذج المركز Cryptomator الخاص بك لديه ترخيص غير صالح. الرجاء إبلاغ مسؤول مركز لترقية أو تجديد الترخيص.
# Lock # Lock
## Force ## Force
lock.forced.message=فشلت عملية القفل
lock.forced.description=تم حظر قفل "%s" بواسطة العمليات المعلقة أو الملفات المفتوحة. يمكنك فرض قفل هذا المخزن، ولكن مقاطعة عمليات الادخال والاخراج I/O قد تؤدي لفقدان البيانات غير المحفوظة. lock.forced.description=تم حظر قفل "%s" بواسطة العمليات المعلقة أو الملفات المفتوحة. يمكنك فرض قفل هذا المخزن، ولكن مقاطعة عمليات الادخال والاخراج I/O قد تؤدي لفقدان البيانات غير المحفوظة.
lock.forced.retryBtn=اعد المحاولة lock.forced.retryBtn=اعد المحاولة
lock.forced.forceBtn=قفل قسري
## Failure ## Failure
lock.fail.message=فشلت عملية اقفال الخزنة. lock.fail.message=فشلت عملية اقفال الخزنة.
lock.fail.description=فشل عملية قفل %s". تأكد من حفظ العمل غير المحفوظ في مكان آخر وأن العمليات الهامة للقراءة/الكتابة قد انتهت. من أجل إغلاق المخزن، اقتل تطبيق Cryptomator. lock.fail.description=فشل عملية قفل %s". تأكد من حفظ العمل غير المحفوظ في مكان آخر وأن العمليات الهامة للقراءة/الكتابة قد انتهت. من أجل إغلاق المخزن، اقتل تطبيق Cryptomator.
@@ -152,11 +209,50 @@ migration.impossible.moreInfo=لا يزال ممكناً فتح المخزن ب
# Health Check # Health Check
## Start ## Start
health.title=فحص الصحة لـ "%s"
health.intro.header=فحص الصحة
health.intro.text=فحص الصحة هو مجموعة من الفحوص للكشف عن المشاكل وربما إصلاحها في الهيكل الداخلي للمخزن الخاص بك. يرجى مراعاة ما يلي:
health.intro.remarkSync=تحقق من مزامنة جميع الأجهزة، وهذا يحل معظم المشاكل.
health.intro.remarkFix=لا يمكن حل جميع المشاكل.
health.intro.remarkBackup=إذا كانت البيانات تالفة، نسخة احتياطية يمكن فقط أن تساعد.
health.intro.affirmation=لقد قرأت وفهمت المعلومات الواردة أعلاه
## Start Failure ## Start Failure
health.fail.header=خطأ في تحميل إعدادات المخزن
health.fail.ioError=حدث خطأ أثناء الوصول إلى ملف التهيئة وقراءته.
health.fail.parseError=حدث خطأ أثناء تحليل إعدادات المخزن.
health.fail.moreInfo=المزيد من المعلومات
## Check Selection ## Check Selection
health.checkList.description=حدد عمليات التحقق في القائمة اليسرى أو استخدم الأزرار أدناه.
health.checkList.selectAllButton=اختر جميع الفحوص
health.checkList.deselectAllButton=إلغاء اختيار جميع الفحوص
health.check.runBatchBtn=تشغيل الفحوص المحددة
## Detail view ## Detail view
health.check.detail.noSelectedCheck=للحصول على النتائج اختر فحص صحة مكتمل من القائمة اليسرى.
health.check.detail.checkScheduled=تم تحديد ميعاد للفحص.
health.check.detail.checkRunning=جاري الفحص…
health.check.detail.checkSkipped=لم يتم تحديد الفحص للتشغيل.
health.check.detail.checkFinished=تم انتهاء الفحص بنجاح.
health.check.detail.checkFinishedAndFound=تم انتهاء الفحص. فضلا راجع النتائج.
health.check.detail.checkFailed=الفحص توقف بسبب خطأ.
health.check.detail.checkCancelled=تم إلغاء الفحص.
health.check.detail.listFilters.label=التصفية
health.check.detail.fixAllSpecificBtn=إصلاح كل الأنواع
health.check.exportBtn=تصدير التقرير
## Result view ## Result view
health.result.severityFilter.all=الخطورة - الكل
health.result.severityFilter.good=جيد
health.result.severityFilter.info=معلومات
health.result.severityFilter.warn=تحذير
health.result.severityFilter.crit=حرج
health.result.severityTip.good=الخطورة: جيد\nبنية المخزن عادية.
health.result.fixStateFilter.notFixable=غير قابل للإصلاح
health.result.fixStateFilter.fixing=يتم الإصلاح…
health.result.fixStateFilter.fixed=تم الإصلاح
health.result.fixStateFilter.fixFailed=فشل الإصلاح
## Fix Application ## Fix Application
health.fix.fixBtn=إصلاح
health.fix.successTip=تم الإصلاح بنجاح
health.fix.failTip=فشل الإصلاح، راجع السجل للحصول على التفاصيل
# Preferences # Preferences
preferences.title=تفضيلات preferences.title=تفضيلات
@@ -196,6 +292,8 @@ stats.cacheHitRate=معدل استخدام الكاش
stats.read.throughput.idle=قراءة: خامل stats.read.throughput.idle=قراءة: خامل
stats.decr.total.data.none=تم فك تشفير البيانات:- stats.decr.total.data.none=تم فك تشفير البيانات:-
## Write ## Write
stats.write.total.data.mib=البيانات المكتوبة: %.1f م.ب
stats.write.total.data.gib=البيانات المكتوبة: %.1f ج.ب
stats.encr.total.data.none=البيانات المشفرة: - stats.encr.total.data.none=البيانات المشفرة: -
## Accesses ## Accesses
@@ -215,7 +313,7 @@ main.vaultlist.contextMenu.unlock=فتح…
main.vaultlist.contextMenu.unlockNow=افتح الان main.vaultlist.contextMenu.unlockNow=افتح الان
main.vaultlist.contextMenu.vaultoptions=إظهار خيارات المخزن main.vaultlist.contextMenu.vaultoptions=إظهار خيارات المخزن
main.vaultlist.contextMenu.reveal=اظهار القرص main.vaultlist.contextMenu.reveal=اظهار القرص
main.vaultlist.addVaultBtn=أضِف مخزنًا main.vaultlist.addVaultBtn=إضافة
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=شكرا لاختيار Cryptomator لحماية ملفاتك. إذا كنت بحاجة إلى أية مساعدة، تحقق من دليل وتعليمات الإستخدام: main.vaultDetail.welcomeOnboarding=شكرا لاختيار Cryptomator لحماية ملفاتك. إذا كنت بحاجة إلى أية مساعدة، تحقق من دليل وتعليمات الإستخدام:
@@ -263,10 +361,11 @@ wrongFileAlert.link=لمزيد من المساعدة، قم بزيارة
## General ## General
vaultOptions.general=عام vaultOptions.general=عام
vaultOptions.general.vaultName=اسم المخزن vaultOptions.general.vaultName=اسم المخزن
vaultOptions.general.autoLock.lockAfterTimePart2=دقائق
vaultOptions.general.unlockAfterStartup=فتح قفل المخزن عند بدء تشغيل Cryptomator vaultOptions.general.unlockAfterStartup=فتح قفل المخزن عند بدء تشغيل Cryptomator
vaultOptions.general.actionAfterUnlock=بعد فتح القفل بنجاح vaultOptions.general.actionAfterUnlock=بعد فتح القفل بنجاح
vaultOptions.general.actionAfterUnlock.ignore=‮لا تفعل شيئاً vaultOptions.general.actionAfterUnlock.ignore=‮لا تفعل شيئاً
vaultOptions.general.actionAfterUnlock.reveal=اظهار القرص vaultOptions.general.actionAfterUnlock.reveal=إظهار القرص
vaultOptions.general.actionAfterUnlock.ask=اسأل vaultOptions.general.actionAfterUnlock.ask=اسأل
## Mount ## Mount
@@ -315,4 +414,6 @@ passwordStrength.messageLabel.4=قوية جداً
# Quit # Quit
quit.lockAndQuitBtn=قفل و خروج quit.lockAndQuitBtn=قفل و خروج
# Forced Quit # Forced Quit
# Update Reminder
+21 -6
View File
@@ -20,6 +20,8 @@ error.description=Cryptomator не чакаў такога павароту. Т
error.hyperlink.lookup=Шукаць гэтую памылку error.hyperlink.lookup=Шукаць гэтую памылку
error.hyperlink.report=Паведаміць пра гэтую памылку error.hyperlink.report=Паведаміць пра гэтую памылку
error.technicalDetails=Падрабязнасці: error.technicalDetails=Падрабязнасці:
error.existingSolutionDescription=Cryptomator не чакаў такога, але мы знайшлі, як можна выправіць гэтую хібу. Калі ласка, скарыстайся спасылкаю.
error.hyperlink.solution=Паглядзець на рашэнне
# Defaults # Defaults
defaults.vault.vaultName=Скарбніца defaults.vault.vaultName=Скарбніца
@@ -35,9 +37,6 @@ traymenu.vault.reveal=Паказаць
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Дадаць скарбніцу addvaultwizard.title=Дадаць скарбніцу
## Welcome
addvaultwizard.welcome.newButton=Стварыць новую скарбніцу
addvaultwizard.welcome.existingButton=Адчыніць існуючую скарбніцу
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Абраць назву для скарбніцы addvaultwizard.new.nameInstruction=Абраць назву для скарбніцы
@@ -59,6 +58,7 @@ addvaultwizard.new.validCharacters.message=Нчзва скарбніцы мус
addvaultwizard.new.validCharacters.chars=Слоўныя знакі, накшталт a, ж або 수 addvaultwizard.new.validCharacters.chars=Слоўныя знакі, накшталт a, ж або 수
addvaultwizard.new.validCharacters.numbers=Лічбы addvaultwizard.new.validCharacters.numbers=Лічбы
addvaultwizard.new.validCharacters.dashes=Злучок (%s) або падкрэслінік (%s) addvaultwizard.new.validCharacters.dashes=Злучок (%s) або падкрэслінік (%s)
### Expert Settings
### Password ### Password
addvaultwizard.new.createVaultBtn=Стварыць скарбніцу addvaultwizard.new.createVaultBtn=Стварыць скарбніцу
addvaultwizard.new.generateRecoveryKeyChoice=Бяз гэтага пароля ты ня зможаш атрымаць доступ да сваіх даных. Ці хочаш ты мець ключ аднаўлення на выпадак, калі ты згубіш свой пароль? addvaultwizard.new.generateRecoveryKeyChoice=Бяз гэтага пароля ты ня зможаш атрымаць доступ да сваіх даных. Ці хочаш ты мець ключ аднаўлення на выпадак, калі ты згубіш свой пароль?
@@ -126,7 +126,6 @@ unlock.success.revealBtn=Паказаць дыск
unlock.error.customPath.message=Не магчыма змантажаваць скарбніцу да карыстальніцкай сцежкі unlock.error.customPath.message=Не магчыма змантажаваць скарбніцу да карыстальніцкай сцежкі
unlock.error.customPath.description.notSupported=Калі ты надалей жадаеш карыстацца адмысловаю сцежкаю, калі ласка, пайдзі ў налады ды абары там тып тому, які падтрымлівае яе. У іншым выпадку пайдзі ў опцыі скарбніцы ды абяры там пункт мантажавання, які падтрымліваецца. unlock.error.customPath.description.notSupported=Калі ты надалей жадаеш карыстацца адмысловаю сцежкаю, калі ласка, пайдзі ў налады ды абары там тып тому, які падтрымлівае яе. У іншым выпадку пайдзі ў опцыі скарбніцы ды абяры там пункт мантажавання, які падтрымліваецца.
unlock.error.customPath.description.notExists=Адмысловая сцежка мантажавання не існуе. Ствары яе ў сваёй файлавай сістэме, альбо змяні яе ў опцыях скарбніцы. unlock.error.customPath.description.notExists=Адмысловая сцежка мантажавання не існуе. Ствары яе ў сваёй файлавай сістэме, альбо змяні яе ў опцыях скарбніцы.
unlock.error.customPath.description.generic=Ты абраў адмысловую сцежку мантажавання для гэтай скарбніцы, але скарыстацца ёю не ўдалося. Вось паведамленне пра памылку: %s
## Hub ## Hub
hub.noKeychain.message=Няма доступу да ключа прылады hub.noKeychain.message=Няма доступу да ключа прылады
hub.noKeychain.description=Каб разамкнуць скарбніцы Hub, патрэбны ключ прылады, які захаваны ў звязку ключоў. Каб працягнуць, уключы "%s" ды абяры звязак ключоў у наладах. hub.noKeychain.description=Каб разамкнуць скарбніцы Hub, патрэбны ключ прылады, які захаваны ў звязку ключоў. Каб працягнуць, уключы "%s" ды абяры звязак ключоў у наладах.
@@ -193,11 +192,15 @@ migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Файлава
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Файлавая сістэма не дазваляе пісаць у яе. migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Файлавая сістэма не дазваляе пісаць у яе.
## Impossible ## Impossible
migration.impossible.heading=Не мажліва перанесці скарбніцу migration.impossible.heading=Не мажліва перанесці скарбніцу
migration.impossible.reason=Скарбніца ня можа аўтаматычна зьміґравацца, бо ейнае месца сховішча альбо пункт доступу не падтрымліваюцца.
migration.impossible.moreInfo=Скарбніца ўсё яшчэ можа адчыняцца, нягледзячы на старую вэрсію. Інструкцыю ручнога міґравання скарбніцы ты знойдзеш тут:
# Health Check # Health Check
## Start ## Start
health.title=Тэст на цэласнасць для "%s" health.title=Тэст на цэласнасць для "%s"
health.intro.header=Тэст на цэласнасць health.intro.header=Тэст на цэласнасць
health.intro.text=Тэст на цэласнасьць – гэта калекцыя тэстаў для выяўлення ды выпраўленню хібаў унутранай структуры тваёй скарбніцы. Калі ласка, зьвярні ўвагу:
health.intro.remarkSync=Пераканайся, што ўсе прыстоі цалкам сынхранаваныя – гэта вырашае большасьць праблемаў.
health.intro.remarkFix=Ня ўсе хібы могуць быць выпраўленыя. health.intro.remarkFix=Ня ўсе хібы могуць быць выпраўленыя.
health.intro.remarkBackup=Калі даныя пашкоджаныя, дапаможа толькі рэзервовая копія. health.intro.remarkBackup=Калі даныя пашкоджаныя, дапаможа толькі рэзервовая копія.
health.intro.affirmation=Я прачытала і зразумела інфармацыю зверху health.intro.affirmation=Я прачытала і зразумела інфармацыю зверху
@@ -270,8 +273,10 @@ preferences.interface.showMinimizeButton=Паказаць кнопку згор
preferences.interface.showTrayIcon=Паказваць іконку на інфармацыйнай панэлі (спатрэбіцца перазапуск) preferences.interface.showTrayIcon=Паказваць іконку на інфармацыйнай панэлі (спатрэбіцца перазапуск)
## Volume ## Volume
preferences.volume=Віртуальны дыск preferences.volume=Віртуальны дыск
preferences.volume.type=Тып тому
preferences.volume.type.automatic=Аўтаматычна preferences.volume.type.automatic=Аўтаматычна
preferences.volume.docsTooltip=Адчыні дакумэнтацыю, каб даведацца больш пра розныя тыпы тому. preferences.volume.docsTooltip=Адчыні дакумэнтацыю, каб даведацца больш пра розныя тыпы тому.
preferences.volume.fuseRestartRequired=Каб дастасаваць зьмены, Cryptomator патрэбна перазапусьціць.
preferences.volume.tcp.port=Порт TCP preferences.volume.tcp.port=Порт TCP
preferences.volume.supportedFeatures=Абраны тып тому падтрымлівае наступныя функцыі: preferences.volume.supportedFeatures=Абраны тып тому падтрымлівае наступныя функцыі:
preferences.volume.feature.mountAuto=Аўтаматычны выбар пункту мантажавання preferences.volume.feature.mountAuto=Аўтаматычны выбар пункту мантажавання
@@ -345,9 +350,10 @@ main.vaultlist.contextMenu.unlock=Адамкнуць…
main.vaultlist.contextMenu.unlockNow=Разамкнуць зараз main.vaultlist.contextMenu.unlockNow=Разамкнуць зараз
main.vaultlist.contextMenu.vaultoptions=Паказаць параметры скарбніцы main.vaultlist.contextMenu.vaultoptions=Паказаць параметры скарбніцы
main.vaultlist.contextMenu.reveal=Паказаць дыск main.vaultlist.contextMenu.reveal=Паказаць дыск
main.vaultlist.addVaultBtn=Дадаць скарбніцу main.vaultlist.addVaultBtn=Дадаць
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Дзякуй, што ты абраў Cryptomator для абароны тваіх файлаў. Калі табе патрэбна дапамога, калі ласка, паглядзі нашы інструкцыі:
### Locked ### Locked
main.vaultDetail.lockedStatus=ЗАМКНЁНА main.vaultDetail.lockedStatus=ЗАМКНЁНА
main.vaultDetail.unlockBtn=Адамкнуць… main.vaultDetail.unlockBtn=Адамкнуць…
@@ -386,6 +392,7 @@ main.vaultDetail.error.windowTitle=Памылка загрузкі скарбн
# Wrong File Alert # Wrong File Alert
wrongFileAlert.title=Як зашыфраваць файлы wrongFileAlert.title=Як зашыфраваць файлы
wrongFileAlert.message=Ці спрабаваў ты зашыфраваць гэтыя файлы? wrongFileAlert.message=Ці спрабаваў ты зашыфраваць гэтыя файлы?
wrongFileAlert.description=Для гэтай мэты Cryptomator стварае том у тваім мэнэджары файлавай сыстэмы.
wrongFileAlert.instruction.0=Каб зашыфраваць файлы, зрабі наступныя крокі: wrongFileAlert.instruction.0=Каб зашыфраваць файлы, зрабі наступныя крокі:
wrongFileAlert.instruction.1=1. Разамкні свая скарбніцу. wrongFileAlert.instruction.1=1. Разамкні свая скарбніцу.
wrongFileAlert.instruction.2=2. Пстрыкні па "Паказаць"; каб адчыніць том у тваім файлавым мэнэджары. wrongFileAlert.instruction.2=2. Пстрыкні па "Паказаць"; каб адчыніць том у тваім файлавым мэнэджары.
@@ -426,6 +433,7 @@ vaultOptions.masterkey.recoveryKeyExplanation=Ключ аднаўлення –
vaultOptions.masterkey.showRecoveryKeyBtn=Паказаць ключ аднаўлення vaultOptions.masterkey.showRecoveryKeyBtn=Паказаць ключ аднаўлення
vaultOptions.masterkey.recoverPasswordBtn=Скінуць пароль vaultOptions.masterkey.recoverPasswordBtn=Скінуць пароль
## Hub ## Hub
vaultOptions.hub=Аднаўленне
# Recovery Key # Recovery Key
## Display Recovery Key ## Display Recovery Key
@@ -437,6 +445,7 @@ recoveryKey.display.StorageHints=Захоўвай іх у бяспечным м
## Reset Password ## Reset Password
### Enter Recovery Key ### Enter Recovery Key
recoveryKey.recover.title=Скінуць пароль recoveryKey.recover.title=Скінуць пароль
recoveryKey.recover.prompt=Увядзі ключ аднаўлення для "%s":
recoveryKey.recover.correctKey=Гэта валідны ключ аднаўлення recoveryKey.recover.correctKey=Гэта валідны ключ аднаўлення
recoveryKey.recover.wrongKey=Гэты ключ аднаўлення належыць іншай скарбніцы recoveryKey.recover.wrongKey=Гэты ключ аднаўлення належыць іншай скарбніцы
recoveryKey.recover.invalidKey=Несапраўдны ключ аднаўлення recoveryKey.recover.invalidKey=Несапраўдны ключ аднаўлення
@@ -448,6 +457,10 @@ recoveryKey.recover.resetSuccess.message=Пароль паспяхова скі
recoveryKey.recover.resetSuccess.description=Ты можаш разамкнуць сваю скарбніцу з дапамогаю новага паролю. recoveryKey.recover.resetSuccess.description=Ты можаш разамкнуць сваю скарбніцу з дапамогаю новага паролю.
# Convert Vault # Convert Vault
convertVault.title=Перабудаваць скарбніцу
convertVault.convert.convertBtn.before=Перабудаваць
convertVault.convert.convertBtn.processing=Перабудаванне…
convertVault.success.message=Перабудаванне прайшло паспяхова
# New Password # New Password
newPassword.promptText=Увядзі новы пароль newPassword.promptText=Увядзі новы пароль
@@ -470,4 +483,6 @@ quit.lockAndQuitBtn=Замкнуць ды вайсці
# Forced Quit # Forced Quit
quit.forced.message=Некаторыя скарбніцы не магчыма замкнуць quit.forced.message=Некаторыя скарбніцы не магчыма замкнуць
quit.forced.description=Замыканне скарбніц было заблакавана праз дзеючыя аперацыі альбо праз адчыненыя файлы. Ты можаш прымусова замкнуць скарбніцы, але гэта можа прывесці да страты незахаваных даных. quit.forced.description=Замыканне скарбніц было заблакавана праз дзеючыя аперацыі альбо праз адчыненыя файлы. Ты можаш прымусова замкнуць скарбніцы, але гэта можа прывесці да страты незахаваных даных.
quit.forced.forceAndQuitBtn=Прымусіць і выйсці quit.forced.forceAndQuitBtn=Прымусіць і выйсці
# Update Reminder
+30 -5
View File
@@ -35,9 +35,6 @@ traymenu.vault.reveal=Разкриване
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Добавяне на хранилище addvaultwizard.title=Добавяне на хранилище
## Welcome
addvaultwizard.welcome.newButton=Ново хранилище
addvaultwizard.welcome.existingButton=Отваряне на хранилище
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Изберете име на хранилището addvaultwizard.new.nameInstruction=Изберете име на хранилището
@@ -59,6 +56,7 @@ addvaultwizard.new.validCharacters.message=Името на хранилищет
addvaultwizard.new.validCharacters.chars=Букви (напр. a, ж или 수) addvaultwizard.new.validCharacters.chars=Букви (напр. a, ж или 수)
addvaultwizard.new.validCharacters.numbers=Числа addvaultwizard.new.validCharacters.numbers=Числа
addvaultwizard.new.validCharacters.dashes=Тире (%s) или долна черта (%s) addvaultwizard.new.validCharacters.dashes=Тире (%s) или долна черта (%s)
### Expert Settings
### Password ### Password
addvaultwizard.new.createVaultBtn=Създаване addvaultwizard.new.createVaultBtn=Създаване
addvaultwizard.new.generateRecoveryKeyChoice=Без парола няма да имате достъп до данните си. Желаете ли да бъде създаден ключ за възстановяване, в случай че загубите паролата си? addvaultwizard.new.generateRecoveryKeyChoice=Без парола няма да имате достъп до данните си. Желаете ли да бъде създаден ключ за възстановяване, в случай че загубите паролата си?
@@ -118,17 +116,40 @@ unlock.chooseMasterkey.filePickerMimeDesc=Гкавен ключ на Крипт
## Success ## Success
unlock.success.message=Отключено е успешно unlock.success.message=Отключено е успешно
unlock.success.description=Съдържанието на хранилището „%s“ е достъпно в точката му на монтиране. unlock.success.description=Съдържанието на хранилището „%s“ е достъпно в точката му на монтиране.
unlock.success.rememberChoice=Запомняне на избора и да не бъде задаван отново този въпрос
unlock.success.revealBtn=Разкриване на диска unlock.success.revealBtn=Разкриване на диска
## Failure ## Failure
unlock.error.customPath.message=Хранилището не може да бъде монтирано в потребителския път
unlock.error.customPath.description.notSupported=Ако искате да продължите да използвате потребитрлския път, отидете в настройките и изберете вид на дял, който поддържа потребителски пътища. В противен случай отидете в настройките на хранилището и изберете поддържана точка за монтиране.
unlock.error.customPath.description.notExists=Потребителският път на монтиране не съществува. Създайте го в местната файлова система или го променете в настройките на хранилището.
## Hub ## Hub
hub.noKeychain.message=Няма достъп до ключа на устройството
hub.noKeychain.description=За да отключите хранилищата в Hub е необходим ключ за устройството, който се защитава с помощта на ключодържател. За да продължите, разрешете „%s“ и изберете ключодържателя в настройките.
hub.noKeychain.openBtn=Към настройките hub.noKeychain.openBtn=Към настройките
### Waiting ### Waiting
hub.auth.message=Изчакване на удостоверяване…
hub.auth.description=Автоматично ще бъдете пренасочени към страницата за вход.
hub.auth.loginLink=Не сте пренасочени? Щракнете тук, за да посетите.
### Receive Key ### Receive Key
hub.receive.message=Обработване на отговора…
hub.receive.description=Криптоматор получава и обработва отговора от Hub. Изчакайте.
### Register Device ### Register Device
hub.register.message=Изисква се име на устройство
hub.register.description=Изглежда, че това е първи достъп до Hub от това устройство. За да го разпознаете при разрешаване на достъпа, трябва да му дадете име.
hub.register.nameLabel=Име на устройството
hub.register.occupiedMsg=Това име вече е заето
hub.register.registerBtn=Потвърждаване
### Registration Success ### Registration Success
hub.registerSuccess.message=Устройството е именувано
hub.registerSuccess.description=За да получи достъп до хранилището, устройството трябва да бъде упълномощено от собственика на хранилището.
### Registration Failed ### Registration Failed
hub.registerFailed.message=Грешка при именуване на устройството
hub.registerFailed.description=В процеса на именуване е допусната грешка. За повече подробности разгледайте дневника на приложението.
### Unauthorized ### Unauthorized
hub.unauthorized.message=Отказан достъп
hub.unauthorized.description=Устройството не е упълномощено за достъп до това хранилище. Поискайте достъп от собственика.
### License Exceeded ### License Exceeded
hub.invalidLicense.message=Лиценза за Hub е недействителен
# Lock # Lock
## Force ## Force
@@ -140,6 +161,7 @@ hub.noKeychain.openBtn=Към настройките
## Success ## Success
migration.success.unlockNow=Отключване сега migration.success.unlockNow=Отключване сега
## Missing file system capabilities ## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=Неподдържана файлова система
## Impossible ## Impossible
# Health Check # Health Check
@@ -166,7 +188,9 @@ preferences.title=Настройки
## General ## General
## Interface ## Interface
preferences.interface.theme=Оформление preferences.interface.theme=Оформление
preferences.interface.theme.automatic=Автоматично
## Volume ## Volume
preferences.volume.type.automatic=Автоматично
## Updates ## Updates
## Contribution ## Contribution
#<-- Add entries for donations and code/translation/documentation contribution --> #<-- Add entries for donations and code/translation/documentation contribution -->
@@ -189,7 +213,6 @@ main.vaultlist.contextMenu.unlock=Отключване…
main.vaultlist.contextMenu.unlockNow=Отключване сега main.vaultlist.contextMenu.unlockNow=Отключване сега
main.vaultlist.contextMenu.vaultoptions=Настройки на хранилището main.vaultlist.contextMenu.vaultoptions=Настройки на хранилището
main.vaultlist.contextMenu.reveal=Разкриване на диска main.vaultlist.contextMenu.reveal=Разкриване на диска
main.vaultlist.addVaultBtn=Добавяне на хранилище
## Vault Detail ## Vault Detail
### Welcome ### Welcome
### Locked ### Locked
@@ -230,4 +253,6 @@ vaultOptions.masterkey.changePasswordBtn=Промяна на парола
# Quit # Quit
# Forced Quit # Forced Quit
# Update Reminder
@@ -33,9 +33,6 @@ traymenu.vault.lock=লক করুন
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=ভোল্ট যুক্ত করুন addvaultwizard.title=ভোল্ট যুক্ত করুন
## Welcome
addvaultwizard.welcome.newButton=নতুন ভোল্ট তৈরি করুন
addvaultwizard.welcome.existingButton=বিদ্যমান কোনো ভোল্ট খুলুন
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=ভোল্ট এর একটি নাম দেন addvaultwizard.new.nameInstruction=ভোল্ট এর একটি নাম দেন
@@ -57,6 +54,7 @@ addvaultwizard.new.validCharacters.message=ভোল্টের নামটি
addvaultwizard.new.validCharacters.chars=শব্দের অক্ষরগুলো (যেমনঃ a, ж অথবা 수) addvaultwizard.new.validCharacters.chars=শব্দের অক্ষরগুলো (যেমনঃ a, ж অথবা 수)
addvaultwizard.new.validCharacters.numbers=সংখ্যা addvaultwizard.new.validCharacters.numbers=সংখ্যা
addvaultwizard.new.validCharacters.dashes=হাইফেন (%s) অথবা আন্ডারস্কোর (%s) addvaultwizard.new.validCharacters.dashes=হাইফেন (%s) অথবা আন্ডারস্কোর (%s)
### Expert Settings
### Password ### Password
addvaultwizard.new.createVaultBtn=ভোল্ট তৈরি করুন addvaultwizard.new.createVaultBtn=ভোল্ট তৈরি করুন
addvaultwizard.new.generateRecoveryKeyChoice=পাসওয়ার্ড ছাড়া আপনি আপনার তথ্যগুলো ব্যবহার করতে পারবেন না. তাই আপনি কি একটি পুনরুদ্ধার চাবি চান যদি আপনি পাসওয়ার্ড হারিয়ে ফেলেন? addvaultwizard.new.generateRecoveryKeyChoice=পাসওয়ার্ড ছাড়া আপনি আপনার তথ্যগুলো ব্যবহার করতে পারবেন না. তাই আপনি কি একটি পুনরুদ্ধার চাবি চান যদি আপনি পাসওয়ার্ড হারিয়ে ফেলেন?
@@ -138,7 +136,6 @@ lock.forced.retryBtn=পুনরায় চেষ্টা করুন
main.closeBtn.tooltip=বন্ধ করুন main.closeBtn.tooltip=বন্ধ করুন
## Vault List ## Vault List
main.vaultlist.contextMenu.lock=লক করুন main.vaultlist.contextMenu.lock=লক করুন
main.vaultlist.addVaultBtn=ভোল্ট যুক্ত করুন
## Vault Detail ## Vault Detail
### Welcome ### Welcome
### Locked ### Locked
@@ -172,4 +169,6 @@ vaultOptions.mount.mountPoint.directoryPickerButton=নির্বাচন ক
# Quit # Quit
# Forced Quit # Forced Quit
# Update Reminder
@@ -31,9 +31,6 @@ traymenu.vault.reveal=Otkrij
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Dodaj sef addvaultwizard.title=Dodaj sef
## Welcome
addvaultwizard.welcome.newButton=Kreiraj novi sef
addvaultwizard.welcome.existingButton=Otvori postojeći sef
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Izaberi naziv za sef addvaultwizard.new.nameInstruction=Izaberi naziv za sef
@@ -49,6 +46,7 @@ addvaultwizard.new.fileAlreadyExists=Upozorenje: Fajl ili mapa s tim nazivom ve
addvaultwizard.new.locationDoesNotExist=Direktorij u navedenoj putanji ne postoji ili mu se ne može pristupiti addvaultwizard.new.locationDoesNotExist=Direktorij u navedenoj putanji ne postoji ili mu se ne može pristupiti
addvaultwizard.new.locationIsNotWritable=Nije moguće izvršiti operaciju pisanja na navedenoj putanji addvaultwizard.new.locationIsNotWritable=Nije moguće izvršiti operaciju pisanja na navedenoj putanji
addvaultwizard.new.locationIsOk=Pogodno mjesto za vaš sef addvaultwizard.new.locationIsOk=Pogodno mjesto za vaš sef
### Expert Settings
### Password ### Password
addvaultwizard.new.createVaultBtn=Kreiraj novi sef addvaultwizard.new.createVaultBtn=Kreiraj novi sef
addvaultwizard.new.generateRecoveryKeyChoice=Nećete moći pristupiti svojim podacima bez lozinke. Želite li ključ za oporavak u slučaju da izgubite lozinku? addvaultwizard.new.generateRecoveryKeyChoice=Nećete moći pristupiti svojim podacima bez lozinke. Želite li ključ za oporavak u slučaju da izgubite lozinku?
@@ -218,7 +216,6 @@ main.vaultlist.contextMenu.unlock=Otključaj…
main.vaultlist.contextMenu.unlockNow=Otključaj sada main.vaultlist.contextMenu.unlockNow=Otključaj sada
main.vaultlist.contextMenu.vaultoptions=Pokaži opcije sefa main.vaultlist.contextMenu.vaultoptions=Pokaži opcije sefa
main.vaultlist.contextMenu.reveal=Otkrij pogon main.vaultlist.contextMenu.reveal=Otkrij pogon
main.vaultlist.addVaultBtn=Dodaj sef
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Hvala što ste izabrali Cryptomator za zaštitu podataka. Ako vam je potrebna pomoć, pogledajte naše vodiče za početak: main.vaultDetail.welcomeOnboarding=Hvala što ste izabrali Cryptomator za zaštitu podataka. Ako vam je potrebna pomoć, pogledajte naše vodiče za početak:
@@ -314,4 +311,6 @@ passwordStrength.messageLabel.4=Veoma sigurno
# Quit # Quit
quit.lockAndQuitBtn=Zaključaj i zatvori quit.lockAndQuitBtn=Zaključaj i zatvori
# Forced Quit # Forced Quit
# Update Reminder
@@ -20,6 +20,8 @@ error.description=Ui! Cryptomator no esperava que passés això. Podeu cercar al
error.hyperlink.lookup=Cerca aquest error error.hyperlink.lookup=Cerca aquest error
error.hyperlink.report=Notifica aquest error error.hyperlink.report=Notifica aquest error
error.technicalDetails=Detalls: error.technicalDetails=Detalls:
error.existingSolutionDescription=Cryptomator no esperava que això ocorreguera. Però hem trobat una solució per a aquest error. Per favor, done una ullada al següent enllaç.
error.hyperlink.solution=Buscar la solució
# Defaults # Defaults
defaults.vault.vaultName=Caixa forta defaults.vault.vaultName=Caixa forta
@@ -35,9 +37,6 @@ traymenu.vault.reveal=Mostra
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Afegir una caixa forta addvaultwizard.title=Afegir una caixa forta
## Welcome
addvaultwizard.welcome.newButton=Crea una caixa forta nova
addvaultwizard.welcome.existingButton=Obri una caixa forta existent
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Introduiu el nom de la caixa forta addvaultwizard.new.nameInstruction=Introduiu el nom de la caixa forta
@@ -59,6 +58,7 @@ addvaultwizard.new.validCharacters.message=El nom de la caixa forta només pot c
addvaultwizard.new.validCharacters.chars=Caràcters que formen paraules (ex.: a, ж or 수) addvaultwizard.new.validCharacters.chars=Caràcters que formen paraules (ex.: a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Nombres addvaultwizard.new.validCharacters.numbers=Nombres
addvaultwizard.new.validCharacters.dashes=Guionet (%s) o guió baix (%s) addvaultwizard.new.validCharacters.dashes=Guionet (%s) o guió baix (%s)
### Expert Settings
### Password ### Password
addvaultwizard.new.createVaultBtn=Crea la caixa forta addvaultwizard.new.createVaultBtn=Crea la caixa forta
addvaultwizard.new.generateRecoveryKeyChoice=No podreu accedir a les vostres dades sense la contrasenya. Voleu crear una clau de recuperació en cas perdre la vostra contrasenya? addvaultwizard.new.generateRecoveryKeyChoice=No podreu accedir a les vostres dades sense la contrasenya. Voleu crear una clau de recuperació en cas perdre la vostra contrasenya?
@@ -126,7 +126,6 @@ unlock.success.revealBtn=Mostra la unitat
unlock.error.customPath.message=No es pot muntar la caixa forta en la ruta personalitzada unlock.error.customPath.message=No es pot muntar la caixa forta en la ruta personalitzada
unlock.error.customPath.description.notSupported=Si vol continuar fent servir una ruta personalitzada, vagi si us plau a Preferències i seleccioni un tipus de volum que la suporti. Altrament, vagi a les opcions de la caixa forta i escolli un punt de muntatge suportat. unlock.error.customPath.description.notSupported=Si vol continuar fent servir una ruta personalitzada, vagi si us plau a Preferències i seleccioni un tipus de volum que la suporti. Altrament, vagi a les opcions de la caixa forta i escolli un punt de muntatge suportat.
unlock.error.customPath.description.notExists=La ruta de muntatge personalitzada no existeix. Creï-la o canviï-la en les opcions de la caixa forta. unlock.error.customPath.description.notExists=La ruta de muntatge personalitzada no existeix. Creï-la o canviï-la en les opcions de la caixa forta.
unlock.error.customPath.description.generic=Ha seleccionat una ruta personalitzada on muntar la caixa forta, però ha fallat amb aquest missatge: %s
## Hub ## Hub
hub.noKeychain.message=No es pot accedir a la clau del dispositiu hub.noKeychain.message=No es pot accedir a la clau del dispositiu
hub.noKeychain.description=Per poder desblocar caixes fortes del Hub es requereix la clau d'un dispositiu, que s'emmagatzema de forma segura en un clauer. Per continuar, habiliti "%s" i seleccioni un clauer en les Preferències. hub.noKeychain.description=Per poder desblocar caixes fortes del Hub es requereix la clau d'un dispositiu, que s'emmagatzema de forma segura en un clauer. Per continuar, habiliti "%s" i seleccioni un clauer en les Preferències.
@@ -349,7 +348,7 @@ main.vaultlist.contextMenu.unlock=Desbloca…
main.vaultlist.contextMenu.unlockNow=Desbloqueja ara main.vaultlist.contextMenu.unlockNow=Desbloqueja ara
main.vaultlist.contextMenu.vaultoptions=Opcions de la caixa forta main.vaultlist.contextMenu.vaultoptions=Opcions de la caixa forta
main.vaultlist.contextMenu.reveal=Mostra la unitat main.vaultlist.contextMenu.reveal=Mostra la unitat
main.vaultlist.addVaultBtn=Afegir una caixa forta main.vaultlist.addVaultBtn=Afegir
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Gràcies per escollir Cryptomator per protegir els vostres fitxers. Si vos cal ajuda, llegiu les nostres guies per donar els Primers passos: main.vaultDetail.welcomeOnboarding=Gràcies per escollir Cryptomator per protegir els vostres fitxers. Si vos cal ajuda, llegiu les nostres guies per donar els Primers passos:
@@ -476,4 +475,6 @@ quit.lockAndQuitBtn=Bloqueja i surt
# Forced Quit # Forced Quit
quit.forced.message=Algunes caixes fortes no s'han pogut bloquejar quit.forced.message=Algunes caixes fortes no s'han pogut bloquejar
quit.forced.description=No s'ha pogut blocar la caixa forta perquè hi ha operacions pendents o fitxers oberts. Podeu forçar-ne el blocatge, però heu de saber que interrompre l'entrada/sortida pot produir la pèrdua de dades. quit.forced.description=No s'ha pogut blocar la caixa forta perquè hi ha operacions pendents o fitxers oberts. Podeu forçar-ne el blocatge, però heu de saber que interrompre l'entrada/sortida pot produir la pèrdua de dades.
quit.forced.forceAndQuitBtn=Forçar i sortir quit.forced.forceAndQuitBtn=Forçar i sortir
# Update Reminder
+53 -5
View File
@@ -20,6 +20,9 @@ error.description=Jejda! Tohle Cryptomator nečekal. Můžete najít již existu
error.hyperlink.lookup=Vyhledat tuto chybu error.hyperlink.lookup=Vyhledat tuto chybu
error.hyperlink.report=Nahlásit tuto chybu error.hyperlink.report=Nahlásit tuto chybu
error.technicalDetails=Podrobnosti: error.technicalDetails=Podrobnosti:
error.existingSolutionDescription=Cryptomator neočekával, že se tak stane. Našli jsme však existující řešení pro tuto chybu. Podívejte se prosím na následující odkaz.
error.hyperlink.solution=Podívejte se na řešení
error.lookupPermissionMessage=Cryptomator může najít řešení tohoto problému online. To odešle žádost do naší databáze problémů z vaší IP adresy.
# Defaults # Defaults
defaults.vault.vaultName=Trezor defaults.vault.vaultName=Trezor
@@ -35,9 +38,6 @@ traymenu.vault.reveal=Zobrazit
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Přidat trezor addvaultwizard.title=Přidat trezor
## Welcome
addvaultwizard.welcome.newButton=Vytvořit nový trezor
addvaultwizard.welcome.existingButton=Otevřít existující trezor
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Zvolte jméno trezoru addvaultwizard.new.nameInstruction=Zvolte jméno trezoru
@@ -59,6 +59,12 @@ addvaultwizard.new.validCharacters.message=Název trezoru může obsahovat tyto
addvaultwizard.new.validCharacters.chars=Slovní znaky (např. a, ж nebo 수) addvaultwizard.new.validCharacters.chars=Slovní znaky (např. a, ж nebo 수)
addvaultwizard.new.validCharacters.numbers=Čísla addvaultwizard.new.validCharacters.numbers=Čísla
addvaultwizard.new.validCharacters.dashes=Pomlčka (%s) nebo podtržítko (%s) addvaultwizard.new.validCharacters.dashes=Pomlčka (%s) nebo podtržítko (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Zobrazit expertní nastavení
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Zadejte hodnotu mezi 36 a 220 (výchozí 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Otevřete dokumentaci, abyste se dozvěděli více.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maximální délka šifrovaných názvů souborů
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Platný
### Password ### Password
addvaultwizard.new.createVaultBtn=Vytvořit trezor addvaultwizard.new.createVaultBtn=Vytvořit trezor
addvaultwizard.new.generateRecoveryKeyChoice=Nebudete mít přístup k datům bez hesla. Chcete recovery klíč pro případ, že ztratíte heslo? addvaultwizard.new.generateRecoveryKeyChoice=Nebudete mít přístup k datům bez hesla. Chcete recovery klíč pro případ, že ztratíte heslo?
@@ -123,11 +129,18 @@ unlock.success.description=Trezor "%s" byl úspěšně odemčen a nyní je dostu
unlock.success.rememberChoice=Pamatovat si volbu, nezobrazovat to znovu unlock.success.rememberChoice=Pamatovat si volbu, nezobrazovat to znovu
unlock.success.revealBtn=Zobrazit jednotku unlock.success.revealBtn=Zobrazit jednotku
## Failure ## Failure
unlock.error.customPath.message=Nelze připojit trezor k vlastní cestě
unlock.error.customPath.description.notSupported=Pokud chcete pokračovat v používání vlastní cesty, přejděte do nastavení a vyberte typ hlasitosti, který ji podporuje. V opačném případě přejděte do možností trezoru a vyberte podporovaný přípojný bod.
unlock.error.customPath.description.notExists=Cesta k připojení neexistuje. Buď ji vytvořte ve vašem lokálním souborovém systému, nebo ji změňte v možnostech trezoru.
## Hub ## Hub
hub.noKeychain.message=Nelze získat přístup ke klíči zařízení
hub.noKeychain.openBtn=Otevřít předvolby hub.noKeychain.openBtn=Otevřít předvolby
### Waiting ### Waiting
hub.auth.message=Čekání na ověření… hub.auth.message=Čekání na ověření…
hub.auth.description=Měli byste být automaticky přesměrováni na přihlašovací stránku.
hub.auth.loginLink=Nebyli jste přesměrováni? Klikněte zde pro otevření.
### Receive Key ### Receive Key
hub.receive.message=Zpracovávání odezvy…
### Register Device ### Register Device
hub.register.message=Je vyžadován název zařízení hub.register.message=Je vyžadován název zařízení
hub.register.nameLabel=Název zařízení hub.register.nameLabel=Název zařízení
@@ -142,6 +155,7 @@ hub.registerFailed.message=Pojmenování zařízení se nezdařilo
hub.unauthorized.message=Přístup odepřen hub.unauthorized.message=Přístup odepřen
hub.unauthorized.description=Vaše zařízení dosud nebylo oprávněno k přístupu k tomuto trezoru. Požádejte vlastníka trezoru, aby jej autorizoval. hub.unauthorized.description=Vaše zařízení dosud nebylo oprávněno k přístupu k tomuto trezoru. Požádejte vlastníka trezoru, aby jej autorizoval.
### License Exceeded ### License Exceeded
hub.invalidLicense.message=Licence Hubu je neplatná
# Lock # Lock
## Force ## Force
@@ -219,6 +233,11 @@ health.result.severityFilter.good=Dobré
health.result.severityFilter.info=Informace health.result.severityFilter.info=Informace
health.result.severityFilter.warn=Varování health.result.severityFilter.warn=Varování
health.result.severityFilter.crit=Kritické health.result.severityFilter.crit=Kritické
health.result.fixStateFilter.fixable=Opravitelné
health.result.fixStateFilter.notFixable=Ne opravitelné
health.result.fixStateFilter.fixing=Opravování…
health.result.fixStateFilter.fixed=Opraveno
health.result.fixStateFilter.fixFailed=Opravovaní selhalo
## Fix Application ## Fix Application
health.fix.fixBtn=Opravit health.fix.fixBtn=Opravit
health.fix.successTip=Oprava byla úspěšná health.fix.successTip=Oprava byla úspěšná
@@ -250,6 +269,9 @@ preferences.interface.showTrayIcon=Zobrazit ikonu v liště (vyžaduje restart)
## Volume ## Volume
preferences.volume=Virtuální jednotky preferences.volume=Virtuální jednotky
preferences.volume.type.automatic=Automatické preferences.volume.type.automatic=Automatické
preferences.volume.tcp.port=TCP port
preferences.volume.feature.mountFlags=Vlastní možnosti připojení disku
preferences.volume.feature.readOnly=Připojení disku pouze pro čtení
## Updates ## Updates
preferences.updates=Aktualizace preferences.updates=Aktualizace
preferences.updates.currentVersion=Aktuální verze: %s preferences.updates.currentVersion=Aktuální verze: %s
@@ -272,21 +294,27 @@ stats.title=Statistika pro %s
stats.cacheHitRate=Rychlost dosažené mezipaměti stats.cacheHitRate=Rychlost dosažené mezipaměti
## Read ## Read
stats.read.throughput.idle=Čtení: nečinné stats.read.throughput.idle=Čtení: nečinné
stats.read.throughput.kibs=Rychlost čtení: %.2f KiB/s
stats.read.throughput.mibs=Čtení: %.2f MiB/s stats.read.throughput.mibs=Čtení: %.2f MiB/s
stats.read.total.data.none=Přečteno: - stats.read.total.data.none=Přečteno: -
stats.read.total.data.kib=Přečtená data: %.1f KiB
stats.read.total.data.mib=Přečteno: %.1f MiB stats.read.total.data.mib=Přečteno: %.1f MiB
stats.read.total.data.gib=Přečteno: %.1f GiB stats.read.total.data.gib=Přečteno: %.1f GiB
stats.decr.total.data.none=Dešifrováno: - stats.decr.total.data.none=Dešifrováno: -
stats.decr.total.data.kib=Dešifrovaná data: %.1f KiB
stats.decr.total.data.mib=Dešifrováno: %.1f MiB stats.decr.total.data.mib=Dešifrováno: %.1f MiB
stats.decr.total.data.gib=Dešifrováno: %.1f GiB stats.decr.total.data.gib=Dešifrováno: %.1f GiB
stats.read.accessCount=Celkem přečteno: %d stats.read.accessCount=Celkem přečteno: %d
## Write ## Write
stats.write.throughput.idle=Zápis: nečinný stats.write.throughput.idle=Zápis: nečinný
stats.write.throughput.kibs=Rychlost zápisu: %.2f KiB/s
stats.write.throughput.mibs=Zápis: %.2f MiB/s stats.write.throughput.mibs=Zápis: %.2f MiB/s
stats.write.total.data.none=Zapsaná data: - stats.write.total.data.none=Zapsaná data: -
stats.write.total.data.kib=Zapsaná data: %.1f KiB
stats.write.total.data.mib=Zapsáno: %.1f MiB stats.write.total.data.mib=Zapsáno: %.1f MiB
stats.write.total.data.gib=Zapsáno: %.1f GiB stats.write.total.data.gib=Zapsáno: %.1f GiB
stats.encr.total.data.none=Zašifrováno: - stats.encr.total.data.none=Zašifrováno: -
stats.encr.total.data.kib=Zašifrovaná data: %.1f KiB
stats.encr.total.data.mib=Zašifrováno: %.1f MiB stats.encr.total.data.mib=Zašifrováno: %.1f MiB
stats.encr.total.data.gib=Zašifrováno: %.1f GiB stats.encr.total.data.gib=Zašifrováno: %.1f GiB
stats.write.accessCount=Celkem zapsáno: %d stats.write.accessCount=Celkem zapsáno: %d
@@ -310,7 +338,7 @@ main.vaultlist.contextMenu.unlock=Odemknout…
main.vaultlist.contextMenu.unlockNow=Odemknout nyní main.vaultlist.contextMenu.unlockNow=Odemknout nyní
main.vaultlist.contextMenu.vaultoptions=Zobrazit možnosti trezoru main.vaultlist.contextMenu.vaultoptions=Zobrazit možnosti trezoru
main.vaultlist.contextMenu.reveal=Zobrazit jednotku main.vaultlist.contextMenu.reveal=Zobrazit jednotku
main.vaultlist.addVaultBtn=Přidat trezor main.vaultlist.addVaultBtn=Přidat
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Děkujeme, že jste si vybrali Cryptomator pro ochranu vašich souborů. Pokud potřebujete pomoc, podívejte se na naše návody: main.vaultDetail.welcomeOnboarding=Děkujeme, že jste si vybrali Cryptomator pro ochranu vašich souborů. Pokud potřebujete pomoc, podívejte se na naše návody:
@@ -324,12 +352,16 @@ main.vaultDetail.passwordSavedInKeychain=Heslo uloženo
main.vaultDetail.unlockedStatus=ODEMKNUTO main.vaultDetail.unlockedStatus=ODEMKNUTO
main.vaultDetail.accessLocation=Obsah vašeho trezoru je dostupný: main.vaultDetail.accessLocation=Obsah vašeho trezoru je dostupný:
main.vaultDetail.revealBtn=Zobrazit jednotku main.vaultDetail.revealBtn=Zobrazit jednotku
main.vaultDetail.copyUri=Kopírovat URL
main.vaultDetail.lockBtn=Zamknout main.vaultDetail.lockBtn=Zamknout
main.vaultDetail.bytesPerSecondRead=Přečteno: main.vaultDetail.bytesPerSecondRead=Přečteno:
main.vaultDetail.bytesPerSecondWritten=Zapsáno: main.vaultDetail.bytesPerSecondWritten=Zapsáno:
main.vaultDetail.throughput.idle=nečinný main.vaultDetail.throughput.idle=nečinný
main.vaultDetail.throughput.kbps=%.1f KiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=Statistiky trezoru main.vaultDetail.stats=Statistiky trezoru
main.vaultDetail.locateEncryptedFileBtn=Najít šifrovaný soubor
main.vaultDetail.encryptedPathsCopied=Cesta souboru byla zkopírována do schránky!
### Missing ### Missing
main.vaultDetail.missing.info=Cryptomator nemohl najít trezor na této cestě. main.vaultDetail.missing.info=Cryptomator nemohl najít trezor na této cestě.
main.vaultDetail.missing.recheck=Znovu zkontrolovat main.vaultDetail.missing.recheck=Znovu zkontrolovat
@@ -375,6 +407,7 @@ vaultOptions.mount.mountPoint=Přípojný bod
vaultOptions.mount.mountPoint.auto=Automaticky vybrat vhodné místo vaultOptions.mount.mountPoint.auto=Automaticky vybrat vhodné místo
vaultOptions.mount.mountPoint.driveLetter=Použít zvolenou jednotku vaultOptions.mount.mountPoint.driveLetter=Použít zvolenou jednotku
vaultOptions.mount.mountPoint.directoryPickerButton=Vybrat... vaultOptions.mount.mountPoint.directoryPickerButton=Vybrat...
vaultOptions.mount.mountPoint.directoryPickerTitle=Vyberte složku
## Master Key ## Master Key
vaultOptions.masterkey=Heslo vaultOptions.masterkey=Heslo
vaultOptions.masterkey.changePasswordBtn=Změnit heslo vaultOptions.masterkey.changePasswordBtn=Změnit heslo
@@ -383,6 +416,9 @@ vaultOptions.masterkey.recoveryKeyExplanation=Obnovovací klíč je váš jedin
vaultOptions.masterkey.showRecoveryKeyBtn=Zobrazit klíč k obnově vaultOptions.masterkey.showRecoveryKeyBtn=Zobrazit klíč k obnově
vaultOptions.masterkey.recoverPasswordBtn=Resetovat heslo vaultOptions.masterkey.recoverPasswordBtn=Resetovat heslo
## Hub ## Hub
vaultOptions.hub=Obnovení
vaultOptions.hub.convertInfo=V případě nouze můžete použít klíč pro obnovení k převedení tohoho trezoru na trezor s heslem.
vaultOptions.hub.convertBtn=Převést na trezor s heslem
# Recovery Key # Recovery Key
## Display Recovery Key ## Display Recovery Key
@@ -399,6 +435,7 @@ recoveryKey.printout.heading=Obnovovací klíč Cryptomator\n"%s"\n
### Reset Password ### Reset Password
recoveryKey.recover.resetBtn=Resetovat recoveryKey.recover.resetBtn=Resetovat
### Recovery Key Password Reset Success ### Recovery Key Password Reset Success
recoveryKey.recover.resetSuccess.message=Resetování hesla bylo úspěšné
# Convert Vault # Convert Vault
@@ -418,4 +455,15 @@ passwordStrength.messageLabel.4=velmi silné
quit.title=Ukončit aplikaci quit.title=Ukončit aplikaci
quit.lockAndQuitBtn=Uzamknout a zavřít quit.lockAndQuitBtn=Uzamknout a zavřít
# Forced Quit # Forced Quit
quit.forced.message=Některé trezory nelze uzamknout
quit.forced.description=Uzamčení trezorů bylo zablokováno probíhajícími operacemi nebo otevřenými soubory. Můžete vynutit uzamčení zbývajících trezorů, ale přerušení I/O může mít za následek ztrátu neuložených dat.
quit.forced.forceAndQuitBtn=Vynutit a ukončit
# Update Reminder
updateReminder.title=Kontrola aktualizací
updateReminder.message=Zkontrolovat aktualizace?
updateReminder.description=Získejte aktuální informace o nových funkcích, opravách chyb a vylepšeních zabezpečení. Doporučujeme automaticky kontrolovat aktualizace.
updateReminder.notNow=Nyní ne
updateReminder.yesOnce=Ano, jednou
updateReminder.yesAutomatically=Ano, automaticky
+28 -7
View File
@@ -20,6 +20,8 @@ error.description=Cryptomator forventede ikke at dette skete. Du kan gennemse ek
error.hyperlink.lookup=Slå denne fejl op error.hyperlink.lookup=Slå denne fejl op
error.hyperlink.report=Rapportér denne fejl error.hyperlink.report=Rapportér denne fejl
error.technicalDetails=Detaljer: error.technicalDetails=Detaljer:
error.existingSolutionDescription=Cryptomator forventede ikke, at dette ville ske. Men vi har fundet en eksisterende løsning på denne fejl. Tag et kig på følgende link.
error.hyperlink.solution=Tjek løsningen
# Defaults # Defaults
defaults.vault.vaultName=Boks defaults.vault.vaultName=Boks
@@ -35,9 +37,6 @@ traymenu.vault.reveal=Vis
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Tilføj boks addvaultwizard.title=Tilføj boks
## Welcome
addvaultwizard.welcome.newButton=Opret ny boks
addvaultwizard.welcome.existingButton=Open eksisterende boks
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Vælg et navn til boksen addvaultwizard.new.nameInstruction=Vælg et navn til boksen
@@ -59,6 +58,12 @@ addvaultwizard.new.validCharacters.message=Boks-navnet må indeholde de følgend
addvaultwizard.new.validCharacters.chars=Bogstaver (fx a, ж eller 수) addvaultwizard.new.validCharacters.chars=Bogstaver (fx a, ж eller 수)
addvaultwizard.new.validCharacters.numbers=Tal addvaultwizard.new.validCharacters.numbers=Tal
addvaultwizard.new.validCharacters.dashes=Bindestreg (%s) eller understregning (%s) addvaultwizard.new.validCharacters.dashes=Bindestreg (%s) eller understregning (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Aktivér ekspertindstillinger
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Indtast en værdi mellem 36 og 220 (standard 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Åbn dokumentationen for at få mere at vide.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maksimal længde af krypterede filnavne
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Gyldig
### Password ### Password
addvaultwizard.new.createVaultBtn=Opret boks addvaultwizard.new.createVaultBtn=Opret boks
addvaultwizard.new.generateRecoveryKeyChoice=Du kan ikke tilgå dine data uden din adgangskode. Vil du oprette en gendannelses-nøgle i tilfælde af, at du mister din adgangskode? addvaultwizard.new.generateRecoveryKeyChoice=Du kan ikke tilgå dine data uden din adgangskode. Vil du oprette en gendannelses-nøgle i tilfælde af, at du mister din adgangskode?
@@ -126,7 +131,6 @@ unlock.success.revealBtn=Vis drev
unlock.error.customPath.message=Kan ikke montere boks til brugerdefineret sti unlock.error.customPath.message=Kan ikke montere boks til brugerdefineret sti
unlock.error.customPath.description.notSupported=Hvis du ønsker at fortsætte med at bruge den brugerdefinerede sti, skal du gå til præferencer og vælge en type drev der understøtter det. Hvis ikke, skal du gå til boksens indstillinger og vælge et understøttet monteringspunkt. unlock.error.customPath.description.notSupported=Hvis du ønsker at fortsætte med at bruge den brugerdefinerede sti, skal du gå til præferencer og vælge en type drev der understøtter det. Hvis ikke, skal du gå til boksens indstillinger og vælge et understøttet monteringspunkt.
unlock.error.customPath.description.notExists=Den brugerdefinerede monteringssti eksisterer ikke. Opret den enten i dit lokale filsystem eller skift monteringssti i boksens indstillinger. unlock.error.customPath.description.notExists=Den brugerdefinerede monteringssti eksisterer ikke. Opret den enten i dit lokale filsystem eller skift monteringssti i boksens indstillinger.
unlock.error.customPath.description.generic=Du har valgt en brugerdefineret monteringssti til denne boks, men det mislykkedes med beskeden: %s
## Hub ## Hub
hub.noKeychain.message=Kan ikke tilgå enhedsnøgle hub.noKeychain.message=Kan ikke tilgå enhedsnøgle
hub.noKeychain.description=En enhedsnøgle er påkrævet for at låse Hub bokse op. Enhedsnøglen er sikret i en nøglering. For at fortsætte, aktivér “%s” og vælg en nøglering i indstillingerne. hub.noKeychain.description=En enhedsnøgle er påkrævet for at låse Hub bokse op. Enhedsnøglen er sikret i en nøglering. For at fortsætte, aktivér “%s” og vælg en nøglering i indstillingerne.
@@ -154,7 +158,7 @@ hub.registerFailed.description=Der opstod en fejl i navngivnings-processen. Kig
hub.unauthorized.message=Adgang nægtet hub.unauthorized.message=Adgang nægtet
hub.unauthorized.description=Din enhed er endnu ikke blevet godkendt til at få adgang til denne boks. Spørg boks-ejeren om godkendelse. hub.unauthorized.description=Din enhed er endnu ikke blevet godkendt til at få adgang til denne boks. Spørg boks-ejeren om godkendelse.
### License Exceeded ### License Exceeded
hub.invalidLicense.message=Ugyldig Hub licens hub.invalidLicense.message=Ugyldig Hub-licens
hub.invalidLicense.description=Din Cryptomator Hub har en ugyldig licens. Få venligst en Hub administrator til at opgradere eller forny licensen. hub.invalidLicense.description=Din Cryptomator Hub har en ugyldig licens. Få venligst en Hub administrator til at opgradere eller forny licensen.
# Lock # Lock
@@ -351,7 +355,7 @@ main.vaultlist.contextMenu.unlock=Lås op…
main.vaultlist.contextMenu.unlockNow=Lås op nu main.vaultlist.contextMenu.unlockNow=Lås op nu
main.vaultlist.contextMenu.vaultoptions=Vis boksindstillinger main.vaultlist.contextMenu.vaultoptions=Vis boksindstillinger
main.vaultlist.contextMenu.reveal=Vis drev main.vaultlist.contextMenu.reveal=Vis drev
main.vaultlist.addVaultBtn=Tilføj boks main.vaultlist.addVaultBtn=Tilføj
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Tak fordi du valgte Cryptomator til at beskytte dine filer. Hvis du har brug for hjælp, så tjek vores guider for at komme i gang: main.vaultDetail.welcomeOnboarding=Tak fordi du valgte Cryptomator til at beskytte dine filer. Hvis du har brug for hjælp, så tjek vores guider for at komme i gang:
@@ -434,6 +438,9 @@ vaultOptions.masterkey.recoveryKeyExplanation=En gendannelsesnøgle er den enest
vaultOptions.masterkey.showRecoveryKeyBtn=Vis gendannelsesnøgle vaultOptions.masterkey.showRecoveryKeyBtn=Vis gendannelsesnøgle
vaultOptions.masterkey.recoverPasswordBtn=Nulstil adgangskode vaultOptions.masterkey.recoverPasswordBtn=Nulstil adgangskode
## Hub ## Hub
vaultOptions.hub=Gendannelse
vaultOptions.hub.convertInfo=Du kan bruge gendannelsesnøglen til at konvertere denne Hub-boks til en adgangskode-baseret boks i en nødsituation.
vaultOptions.hub.convertBtn=Konvertér til adgangskodebaseret boks
# Recovery Key # Recovery Key
## Display Recovery Key ## Display Recovery Key
@@ -445,6 +452,7 @@ recoveryKey.display.StorageHints=Opbevar den et meget sikkert sted, som fx:\n
## Reset Password ## Reset Password
### Enter Recovery Key ### Enter Recovery Key
recoveryKey.recover.title=Nulstil adgangskode recoveryKey.recover.title=Nulstil adgangskode
recoveryKey.recover.prompt=Indtast gendannelsesnøgle for "%s":
recoveryKey.recover.correctKey=Dette er en gyldig gendannelsesnøgle recoveryKey.recover.correctKey=Dette er en gyldig gendannelsesnøgle
recoveryKey.recover.wrongKey=Denne gendannelsesnøgle tilhører en anden boks recoveryKey.recover.wrongKey=Denne gendannelsesnøgle tilhører en anden boks
recoveryKey.recover.invalidKey=Denne gendannelsesnøgle er ikke gyldig recoveryKey.recover.invalidKey=Denne gendannelsesnøgle er ikke gyldig
@@ -456,6 +464,11 @@ recoveryKey.recover.resetSuccess.message=Adgangskod nulstillet
recoveryKey.recover.resetSuccess.description=Du kan nu låse din boks op med den nye adgangskode. recoveryKey.recover.resetSuccess.description=Du kan nu låse din boks op med den nye adgangskode.
# Convert Vault # Convert Vault
convertVault.title=Konvertér boks
convertVault.convert.convertBtn.before=Konvertér
convertVault.convert.convertBtn.processing=Konverterer…
convertVault.success.message=Konvertering udført
convertVault.hubToPassword.success.description=Du kan nu låse boksen op med den valgte adgangskode uden at kræve Hub adgang.
# New Password # New Password
newPassword.promptText=Skriv en ny adgangskode newPassword.promptText=Skriv en ny adgangskode
@@ -478,4 +491,12 @@ quit.lockAndQuitBtn=Lås og afslut
# Forced Quit # Forced Quit
quit.forced.message=Nogle bokse kunne ikke låses quit.forced.message=Nogle bokse kunne ikke låses
quit.forced.description=Låsning af "%s" blev blokeret fordi der er igangværende operationer eller åbne filer. Du kan gennemtvinge låsningen - men en afbrydelse af igangværende I/O operationer kan resultere i tab af data som endnu ikke er gemt. quit.forced.description=Låsning af "%s" blev blokeret fordi der er igangværende operationer eller åbne filer. Du kan gennemtvinge låsningen - men en afbrydelse af igangværende I/O operationer kan resultere i tab af data som endnu ikke er gemt.
quit.forced.forceAndQuitBtn=Tving og afslut quit.forced.forceAndQuitBtn=Tving og afslut
# Update Reminder
updateReminder.title=Opdateringstjek
updateReminder.message=Tjek for opdateringer?
updateReminder.description=Hold dig opdateret med nye funktioner, fejlrettelser og sikkerhedsforbedringer. Vi anbefaler automatisk at søge efter opdateringer.
updateReminder.notNow=Ikke nu
updateReminder.yesOnce=Ja, én gang
updateReminder.yesAutomatically=Ja, automatisk
+46 -22
View File
@@ -20,6 +20,11 @@ error.description=Cryptomator hat diesen Fehler nicht erwartet. Du kannst für i
error.hyperlink.lookup=Diesen Fehler nachschlagen error.hyperlink.lookup=Diesen Fehler nachschlagen
error.hyperlink.report=Diesen Fehler melden error.hyperlink.report=Diesen Fehler melden
error.technicalDetails=Details: error.technicalDetails=Details:
error.existingSolutionDescription=Cryptomator hat dies nicht erwartet, wir haben jedoch eine funktionierende Lösung für diesen Fehler gefunden. Bitte wirf einen Blick auf den folgenden Link.
error.hyperlink.solution=Lösung nachsehen
error.lookupPermissionMessage=Cryptomator kann online nach einer Lösung für dieses Problem suchen. Hierbei wird eine Anfrage an unsere Problemdatenbank gesendet. Bitte beachte, dass dabei auch deine IP-Adresse übermittelt wird.
error.dismiss=Verwerfen
error.lookUpSolution=Lösung suchen
# Defaults # Defaults
defaults.vault.vaultName=Tresor defaults.vault.vaultName=Tresor
@@ -35,10 +40,8 @@ traymenu.vault.reveal=Anzeigen
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Tresor hinzufügen addvaultwizard.title=Tresor hinzufügen
## Welcome
addvaultwizard.welcome.newButton=Neuen Tresor erstellen
addvaultwizard.welcome.existingButton=Bestehenden Tresor öffnen
## New ## New
addvaultwizard.new.title=Neuen Tresor hinzufügen
### Name ### Name
addvaultwizard.new.nameInstruction=Wähle einen Namen für den Tresor addvaultwizard.new.nameInstruction=Wähle einen Namen für den Tresor
addvaultwizard.new.namePrompt=Tresorname addvaultwizard.new.namePrompt=Tresorname
@@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Der Tresorname darf folgende Zeichen
addvaultwizard.new.validCharacters.chars=Wortzeichen (z. B. a, ж oder 수) addvaultwizard.new.validCharacters.chars=Wortzeichen (z. B. a, ж oder 수)
addvaultwizard.new.validCharacters.numbers=Zahlen addvaultwizard.new.validCharacters.numbers=Zahlen
addvaultwizard.new.validCharacters.dashes=Bindestrich (%s) oder Unterstrich (%s) addvaultwizard.new.validCharacters.dashes=Bindestrich (%s) oder Unterstrich (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Experteneinstellungen aktivieren
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Gib einen Wert zwischen 36 und 220 ein (Standardwert: 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Öffne die Dokumentation, um mehr zu erfahren.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maximale Länge verschlüsselter Dateinamen
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Gültig
### Password ### Password
addvaultwizard.new.createVaultBtn=Tresor erstellen addvaultwizard.new.createVaultBtn=Tresor erstellen
addvaultwizard.new.generateRecoveryKeyChoice=Ohne dieses Passwort kannst du auf deine Daten nicht mehr zugreifen. Möchtest du für den Fall eines Passwortverlusts einen Wiederherstellungsschlüssel erstellen? addvaultwizard.new.generateRecoveryKeyChoice=Ohne dieses Passwort kannst du auf deine Daten nicht mehr zugreifen. Möchtest du für den Fall eines Passwortverlusts einen Wiederherstellungsschlüssel erstellen?
@@ -82,6 +91,7 @@ addvault.new.readme.accessLocation.2=Dies ist der Zugangsort deines Tresors.
addvault.new.readme.accessLocation.3=Alle zu diesem Laufwerk hinzugefügten Dateien werden von Cryptomator verschlüsselt. Du kannst mit diesem arbeiten wie mit jedem anderen Laufwerk bzw. Ordner. Dies ist lediglich eine unverschlüsselte Ansicht des Laufwerkinhalts; auf deiner Festplatte bleiben deine Dateien weiterhin verschlüsselt. addvault.new.readme.accessLocation.3=Alle zu diesem Laufwerk hinzugefügten Dateien werden von Cryptomator verschlüsselt. Du kannst mit diesem arbeiten wie mit jedem anderen Laufwerk bzw. Ordner. Dies ist lediglich eine unverschlüsselte Ansicht des Laufwerkinhalts; auf deiner Festplatte bleiben deine Dateien weiterhin verschlüsselt.
addvault.new.readme.accessLocation.4=Du kannst diese Datei löschen. addvault.new.readme.accessLocation.4=Du kannst diese Datei löschen.
## Existing ## Existing
addvaultwizard.existing.title=Bestehenden Tresor hinzufügen
addvaultwizard.existing.instruction=Wähle die Datei „vault.cryptomator“ deines bestehenden Tresors aus. Falls nur eine Datei mit der Bezeichnung „masterkey.cryptomator“ vorhanden ist, nutze stattdessen diese. addvaultwizard.existing.instruction=Wähle die Datei „vault.cryptomator“ deines bestehenden Tresors aus. Falls nur eine Datei mit der Bezeichnung „masterkey.cryptomator“ vorhanden ist, nutze stattdessen diese.
addvaultwizard.existing.chooseBtn=Durchsuchen … addvaultwizard.existing.chooseBtn=Durchsuchen …
addvaultwizard.existing.filePickerTitle=Tresordatei auswählen addvaultwizard.existing.filePickerTitle=Tresordatei auswählen
@@ -123,10 +133,14 @@ unlock.success.description=Der Inhalt des Tresors „%s“ ist nun über dessen
unlock.success.rememberChoice=Auswahl merken und nicht mehr fragen unlock.success.rememberChoice=Auswahl merken und nicht mehr fragen
unlock.success.revealBtn=Laufwerk anzeigen unlock.success.revealBtn=Laufwerk anzeigen
## Failure ## Failure
unlock.error.customPath.message=Tresor kann nicht an benutzerdefinierten Pfad eingehängt werden unlock.error.customPath.message=Tresor kann nicht in benutzerdefinierten Pfad eingehängt werden
unlock.error.customPath.description.notSupported=Wenn du weiterhin den benutzerdefinierten Pfad verwenden möchtest, öffne die allgemeinen Einstellungen und wähle einen unterstützten Laufwerkstyp. Andernfalls gehe zu den Tresor-Optionen und wähle einen unterstützten Einhängepunkt. unlock.error.customPath.description.notSupported=Wenn du weiterhin den benutzerdefinierten Pfad verwenden möchtest, öffne die allgemeinen Einstellungen und wähle einen unterstützten Laufwerkstyp. Andernfalls gehe zu den Tresor-Optionen und wähle einen unterstützten Einhängepunkt.
unlock.error.customPath.description.notExists=Der benutzerdefinierte Einhängepunkt existiert nicht. Entweder erstelle ihn in deinem lokalen Dateisystem oder ändere ihn in den Tresor-Optionen. unlock.error.customPath.description.notExists=Der benutzerdefinierte Einhängepunkt existiert nicht. Erstelle ihn in deinem lokalen Dateisystem oder ändere ihn in den Tresor-Optionen.
unlock.error.customPath.description.generic=Du hast für diesen Tresor einen benutzerdefinierten Einhängepunkt ausgewählt, aber die Verwendung ist fehlgeschlagen mit der Meldung: %s unlock.error.customPath.description.inUse=Der Laufwerksbuchstabe oder benutzerdefinierte Einhängepunkt „%s“ wird bereits verwendet.
unlock.error.customPath.description.hideawayNotDir=Die temporäre, versteckte Datei „%3$s“, die für das Entsperren verwendet wurde, konnte nicht entfernt werden. Bitte überprüfe die Datei und lösche sie manuell.
unlock.error.customPath.description.couldNotBeCleaned=Dein Tresor konnte nicht in den Pfad „%s“ eingehängt werden. Bitte versuche es erneut oder wähle einen anderen Pfad aus.
unlock.error.customPath.description.notEmptyDir=Der benutzerdefinierte Einhängepunkt "%s" ist kein leerer Ordner. Bitte wähle einen leeren Ordner und versuche es erneut.
unlock.error.customPath.description.generic=Du hast für diesen Tresor einen benutzerdefinierten Einhängepunkt ausgewählt, aber dessen Verwendung ist mit folgender Meldung fehlgeschlagen: %2$s
## Hub ## Hub
hub.noKeychain.message=Zugriff auf Geräteschlüssel nicht möglich hub.noKeychain.message=Zugriff auf Geräteschlüssel nicht möglich
hub.noKeychain.description=Zum Entsperren von Hub-Tresoren wird ein Geräteschlüssel benötigt, der in einem Schlüsselbund gesichert ist. Um fortzufahren, aktiviere „%s“ und wähle in den Einstellungen einen Schlüsselbund. hub.noKeychain.description=Zum Entsperren von Hub-Tresoren wird ein Geräteschlüssel benötigt, der in einem Schlüsselbund gesichert ist. Um fortzufahren, aktiviere „%s“ und wähle in den Einstellungen einen Schlüsselbund.
@@ -155,7 +169,7 @@ hub.unauthorized.message=Zugriff verweigert
hub.unauthorized.description=Dein Gerät wurde noch nicht für den Zugriff auf diesen Tresor autorisiert. Bitte den Tresorbesitzer, dein Gerät zu autorisieren. hub.unauthorized.description=Dein Gerät wurde noch nicht für den Zugriff auf diesen Tresor autorisiert. Bitte den Tresorbesitzer, dein Gerät zu autorisieren.
### License Exceeded ### License Exceeded
hub.invalidLicense.message=Hub-Lizenz ungültig hub.invalidLicense.message=Hub-Lizenz ungültig
hub.invalidLicense.description=Die Lizenz für deine Cryptomator Hub-Instanz ist ungültig. Bitte informiere einen Hub-Administrator, um die Lizenz zu aktualisieren oder zu erneuern. hub.invalidLicense.description=Die Lizenz deiner Cryptomator-Hub-Instanz ist ungültig. Bitte informiere deinen Hub-Administrator, um die Lizenz zu erweitern oder zu erneuern.
# Lock # Lock
## Force ## Force
@@ -172,8 +186,8 @@ migration.title=Tresor upgraden
## Start ## Start
migration.start.header=Tresor upgraden migration.start.header=Tresor upgraden
migration.start.text=Um deinen Tresor "%s" in dieser neuen Version von Cryptomator zu öffnen, muss der Tresor auf ein neueres Format aktualisiert werden. Bevor du dies tust, solltest du Folgendes wissen: migration.start.text=Um deinen Tresor "%s" in dieser neuen Version von Cryptomator zu öffnen, muss der Tresor auf ein neueres Format aktualisiert werden. Bevor du dies tust, solltest du Folgendes wissen:
migration.start.remarkUndone=Diese Aktualisierung kann nicht rückgängig gemacht werden. migration.start.remarkUndone=Dieses Upgrade kann nicht rückgängig gemacht werden.
migration.start.remarkVersions=Ältere Versionen von Cryptomator werden den aktualisierten Tresor nicht öffnen können. migration.start.remarkVersions=Ältere Versionen von Cryptomator können den aktualisierten Tresor nicht öffnen.
migration.start.remarkCanRun=Du musst sicherstellen, dass jedes Gerät, von dem aus du auf den Tresor zugreifst, diese Version von Cryptomator ausführen kann. migration.start.remarkCanRun=Du musst sicherstellen, dass jedes Gerät, von dem aus du auf den Tresor zugreifst, diese Version von Cryptomator ausführen kann.
migration.start.remarkSynced=Du musst sicherstellen, dass dein Tresor auf diesem Gerät und auf deinen anderen Geräten vollständig synchronisiert ist, bevor du ihn aktualisierst. migration.start.remarkSynced=Du musst sicherstellen, dass dein Tresor auf diesem Gerät und auf deinen anderen Geräten vollständig synchronisiert ist, bevor du ihn aktualisierst.
migration.start.confirm=Ich habe die oben genannten Informationen gelesen und verstanden migration.start.confirm=Ich habe die oben genannten Informationen gelesen und verstanden
@@ -280,9 +294,9 @@ preferences.volume.docsTooltip=Öffne die Dokumentation, um mehr über die versc
preferences.volume.fuseRestartRequired=Um die Änderungen anzuwenden, muss Cryptomator neu gestartet werden. preferences.volume.fuseRestartRequired=Um die Änderungen anzuwenden, muss Cryptomator neu gestartet werden.
preferences.volume.tcp.port=TCP-Port preferences.volume.tcp.port=TCP-Port
preferences.volume.supportedFeatures=Der gewählte Laufwerkstyp unterstützt folgende Funktionen: preferences.volume.supportedFeatures=Der gewählte Laufwerkstyp unterstützt folgende Funktionen:
preferences.volume.feature.mountAuto=Automatische Einhängepunkt Auswahl preferences.volume.feature.mountAuto=Automatische Auswahl des Einhängepunkts
preferences.volume.feature.mountToDir=Benutzerdefiniertes Verzeichnis als Einhängepunkt preferences.volume.feature.mountToDir=Benutzerdefiniertes Verzeichnis als Einhängepunkt
preferences.volume.feature.mountToDriveLetter=Laufwerkbuchstaben als Einhängepunkt preferences.volume.feature.mountToDriveLetter=Laufwerksbuchstabe als Einhängepunkt
preferences.volume.feature.mountFlags=Benutzerdefinierte Einhänge-Optionen preferences.volume.feature.mountFlags=Benutzerdefinierte Einhänge-Optionen
preferences.volume.feature.readOnly=Schreibgeschütztes Einhängen preferences.volume.feature.readOnly=Schreibgeschütztes Einhängen
## Updates ## Updates
@@ -334,7 +348,7 @@ stats.write.accessCount=Schreibzugriffe: %d
## Accesses ## Accesses
stats.access.current=Zugriffe: %d stats.access.current=Zugriffe: %d
stats.access.total=Gesamte Zugriffe: %d stats.access.total=Gesamtzugriffe: %d
# Main Window # Main Window
@@ -351,7 +365,9 @@ main.vaultlist.contextMenu.unlock=Entsperren …
main.vaultlist.contextMenu.unlockNow=Jetzt entsperren main.vaultlist.contextMenu.unlockNow=Jetzt entsperren
main.vaultlist.contextMenu.vaultoptions=Tresoroptionen anzeigen main.vaultlist.contextMenu.vaultoptions=Tresoroptionen anzeigen
main.vaultlist.contextMenu.reveal=Laufwerk anzeigen main.vaultlist.contextMenu.reveal=Laufwerk anzeigen
main.vaultlist.addVaultBtn=Tresor hinzufügen main.vaultlist.addVaultBtn=Hinzufügen
main.vaultlist.addVaultBtn.menuItemNew=Neuer Tresor...
main.vaultlist.addVaultBtn.menuItemExisting=Bestehender Tresor...
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Danke, dass du zum Schutz deiner Dateien Cryptomator gewählt hast. Falls du Hilfe brauchst, schau dir unsere Anleitungen an: main.vaultDetail.welcomeOnboarding=Danke, dass du zum Schutz deiner Dateien Cryptomator gewählt hast. Falls du Hilfe brauchst, schau dir unsere Anleitungen an:
@@ -423,9 +439,9 @@ vaultOptions.mount.winDriveLetterOccupied=belegt
vaultOptions.mount.mountPoint=Einhängepunkt vaultOptions.mount.mountPoint=Einhängepunkt
vaultOptions.mount.mountPoint.auto=Automatisch einen geeigneten Ort auswählen vaultOptions.mount.mountPoint.auto=Automatisch einen geeigneten Ort auswählen
vaultOptions.mount.mountPoint.driveLetter=Laufwerksbuchstaben zuweisen vaultOptions.mount.mountPoint.driveLetter=Laufwerksbuchstaben zuweisen
vaultOptions.mount.mountPoint.custom=Ausgewähltes Verzeichnis verwenden vaultOptions.mount.mountPoint.custom=Gewähltes Verzeichnis verwenden
vaultOptions.mount.mountPoint.directoryPickerButton=Durchsuchen … vaultOptions.mount.mountPoint.directoryPickerButton=Durchsuchen …
vaultOptions.mount.mountPoint.directoryPickerTitle=Verzeichnis wählen vaultOptions.mount.mountPoint.directoryPickerTitle=Wähle ein Verzeichnis
## Master Key ## Master Key
vaultOptions.masterkey=Passwort vaultOptions.masterkey=Passwort
vaultOptions.masterkey.changePasswordBtn=Passwort ändern vaultOptions.masterkey.changePasswordBtn=Passwort ändern
@@ -436,7 +452,7 @@ vaultOptions.masterkey.recoverPasswordBtn=Passwort zurücksetzen
## Hub ## Hub
vaultOptions.hub=Wiederherstellung vaultOptions.hub=Wiederherstellung
vaultOptions.hub.convertInfo=Im Notfall kannst du den Wiederherstellungsschlüssel verwenden, um diesen Hub-Tresor in einen passwortgeschützten Tresor umzuwandeln. vaultOptions.hub.convertInfo=Im Notfall kannst du den Wiederherstellungsschlüssel verwenden, um diesen Hub-Tresor in einen passwortgeschützten Tresor umzuwandeln.
vaultOptions.hub.convertBtn=In einen passwortgeschützten Tresor umwandeln vaultOptions.hub.convertBtn=In passwortgeschützten Tresor umwandeln
# Recovery Key # Recovery Key
## Display Recovery Key ## Display Recovery Key
@@ -448,7 +464,7 @@ recoveryKey.display.StorageHints=Bewahre ihn möglichst sicher auf, z. B.\n •
## Reset Password ## Reset Password
### Enter Recovery Key ### Enter Recovery Key
recoveryKey.recover.title=Passwort zurücksetzen recoveryKey.recover.title=Passwort zurücksetzen
recoveryKey.recover.prompt=Gib den Wiederherstellungsschlüssel für "%s" ein: recoveryKey.recover.prompt=Gib den Wiederherstellungsschlüssel für %s ein:
recoveryKey.recover.correctKey=Dieser Wiederherstellungsschlüssel ist gültig recoveryKey.recover.correctKey=Dieser Wiederherstellungsschlüssel ist gültig
recoveryKey.recover.wrongKey=Dieser Wiederherstellungsschlüssel gehört zu einem anderen Tresor recoveryKey.recover.wrongKey=Dieser Wiederherstellungsschlüssel gehört zu einem anderen Tresor
recoveryKey.recover.invalidKey=Dieser Wiederherstellungsschlüssel ist ungültig recoveryKey.recover.invalidKey=Dieser Wiederherstellungsschlüssel ist ungültig
@@ -460,11 +476,11 @@ recoveryKey.recover.resetSuccess.message=Passwort erfolgreich zurückgesetzt
recoveryKey.recover.resetSuccess.description=Du kannst deinen Tresor mit dem neuen Passwort entsperren. recoveryKey.recover.resetSuccess.description=Du kannst deinen Tresor mit dem neuen Passwort entsperren.
# Convert Vault # Convert Vault
convertVault.title=Tresor konvertieren convertVault.title=Tresor umwandeln
convertVault.convert.convertBtn.before=Konvertieren convertVault.convert.convertBtn.before=Konvertieren
convertVault.convert.convertBtn.processing=Konvertierung läuft… convertVault.convert.convertBtn.processing=Wird umgewandelt…
convertVault.success.message=Konvertierung erfolgreich convertVault.success.message=Umwandlung erfolgreich
convertVault.hubToPassword.success.description=Du kannst nun den Tresor mit dem gewählten Passwort entsperren, ohne Hub Zugriff zu benötigen. convertVault.hubToPassword.success.description=Du kannst nun den Tresor mit dem gewählten Passwort entsperren, ohne Hub-Zugriff zu benötigen.
# New Password # New Password
newPassword.promptText=Gib ein neues Passwort ein newPassword.promptText=Gib ein neues Passwort ein
@@ -487,4 +503,12 @@ quit.lockAndQuitBtn=Sperren und beenden
# Forced Quit # Forced Quit
quit.forced.message=Einige Tresore konnten nicht gesperrt werden quit.forced.message=Einige Tresore konnten nicht gesperrt werden
quit.forced.description=Das Sperren von Tresoren wurde durch ausstehende Operationen oder geöffnete Dateien verhindert. Du kannst das Sperren der verbleibenden Tresore erzwingen, jedoch kann das Unterbrechen von E/A-Vorgängen zum Verlust ungespeicherter Daten führen. quit.forced.description=Das Sperren von Tresoren wurde durch ausstehende Operationen oder geöffnete Dateien verhindert. Du kannst das Sperren der verbleibenden Tresore erzwingen, jedoch kann das Unterbrechen von E/A-Vorgängen zum Verlust ungespeicherter Daten führen.
quit.forced.forceAndQuitBtn=Erzwingen und beenden quit.forced.forceAndQuitBtn=Erzwingen und beenden
# Update Reminder
updateReminder.title=Update-Überprüfung
updateReminder.message=Nach Updates suchen?
updateReminder.description=Bleib auf dem Laufenden mit neuen Funktionen, Fehlerbehebungen und Sicherheitsverbesserungen. Wir empfehlen, automatisch nach Updates zu suchen.
updateReminder.notNow=Nicht jetzt
updateReminder.yesOnce=Ja, einmalig
updateReminder.yesAutomatically=Ja, automatisch
+30 -6
View File
@@ -20,6 +20,11 @@ error.description=Ωχ! Το Cryptomator δεν περίμενε να συμβε
error.hyperlink.lookup=Αναζήτηση αυτού του σφάλματος error.hyperlink.lookup=Αναζήτηση αυτού του σφάλματος
error.hyperlink.report=Αναφέρετε αυτό το σφάλμα error.hyperlink.report=Αναφέρετε αυτό το σφάλμα
error.technicalDetails=Λεπτομέρειες: error.technicalDetails=Λεπτομέρειες:
error.existingSolutionDescription=Το Cryptomator δεν περίμενε ότι θα συμβεί αυτό. Αλλά βρήκαμε μια υπάρχουσα λύση για αυτό το σφάλμα. Ρίξτε μια ματιά στον παρακάτω σύνδεσμο.
error.hyperlink.solution=Αναζήτηση της λύσης
error.lookupPermissionMessage=Το Cryptomator μπορεί να αναζητήσει μια λύση για αυτό το πρόβλημα στο διαδίκτυο. Αυτό θα στείλει ένα αίτημα στη βάση δεδομένων προβλημάτων μας από τη διεύθυνση IP σας.
error.dismiss=Παράβλεψη
error.lookUpSolution=Αναζήτηση λύσης
# Defaults # Defaults
defaults.vault.vaultName=Κρύπτη defaults.vault.vaultName=Κρύπτη
@@ -35,10 +40,8 @@ traymenu.vault.reveal=Αποκάλυψη
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Προσθήκη Κρύπτης addvaultwizard.title=Προσθήκη Κρύπτης
## Welcome
addvaultwizard.welcome.newButton=Δημιουργία Νέας Κρύπτης
addvaultwizard.welcome.existingButton=Άνοιγμα Υπάρχοντος Κρύπτης
## New ## New
addvaultwizard.new.title=Προσθήκη Νέας Κρύπτης
### Name ### Name
addvaultwizard.new.nameInstruction=Διαλέξτε ένα όνομα για την κρύπτη addvaultwizard.new.nameInstruction=Διαλέξτε ένα όνομα για την κρύπτη
addvaultwizard.new.namePrompt=Όνομα Κρύπτης addvaultwizard.new.namePrompt=Όνομα Κρύπτης
@@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Το όνομα κρύπτης μπο
addvaultwizard.new.validCharacters.chars=Χαρακτήρες λέξεων (πχ, a, ж or 수) addvaultwizard.new.validCharacters.chars=Χαρακτήρες λέξεων (πχ, a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Αριθμοί addvaultwizard.new.validCharacters.numbers=Αριθμοί
addvaultwizard.new.validCharacters.dashes=Παύλα (%s) ή κάτω παύλα (%s) addvaultwizard.new.validCharacters.dashes=Παύλα (%s) ή κάτω παύλα (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Ενεργοποιήστε τις ρυθμίσεις ειδικών
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Εισάγετε μια τιμή μεταξύ 36 και 220 (προεπιλογή 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Ανοίξτε την τεκμηρίωση για να μάθετε περισσότερα.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Μέγιστο μήκος ονομάτων κρυπτογραφημένων αρχείων
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Έγκυρο
### Password ### Password
addvaultwizard.new.createVaultBtn=Δημιουργία Κρύπτης addvaultwizard.new.createVaultBtn=Δημιουργία Κρύπτης
addvaultwizard.new.generateRecoveryKeyChoice=Δεν θα μπορείτε να έχετε πρόσβαση στα δεδομένα σας χωρίς τον κωδικό σας. Θέλετε να δημιουργηθεί ένα κλειδί ανάκτησης στην περίπτωση που χάσετε τον κωδικό σας; addvaultwizard.new.generateRecoveryKeyChoice=Δεν θα μπορείτε να έχετε πρόσβαση στα δεδομένα σας χωρίς τον κωδικό σας. Θέλετε να δημιουργηθεί ένα κλειδί ανάκτησης στην περίπτωση που χάσετε τον κωδικό σας;
@@ -82,6 +91,7 @@ addvault.new.readme.accessLocation.2=Αυτή είναι η τοποθεσία
addvault.new.readme.accessLocation.3=Κάθε αρχείο που θα προστεθεί σε αυτό τον τόμο θα κωδικοποιηθεί από το Cryptomator. Μπορείτε να το επεξεργαστείτε όπως θα κάνατε σε κάθε δίσκο/φάκελο. Αυτή είναι μόνο για αποκρυπτογραφημένη μορφή των περιεχομένων του, τα αρχεία σας μένουν κωδικοποιημένα στον σκληρό σας δίσκο συνέχεια. addvault.new.readme.accessLocation.3=Κάθε αρχείο που θα προστεθεί σε αυτό τον τόμο θα κωδικοποιηθεί από το Cryptomator. Μπορείτε να το επεξεργαστείτε όπως θα κάνατε σε κάθε δίσκο/φάκελο. Αυτή είναι μόνο για αποκρυπτογραφημένη μορφή των περιεχομένων του, τα αρχεία σας μένουν κωδικοποιημένα στον σκληρό σας δίσκο συνέχεια.
addvault.new.readme.accessLocation.4=Μπορείτε ελεύθερα να αφαιρέσετε το αρχείο. addvault.new.readme.accessLocation.4=Μπορείτε ελεύθερα να αφαιρέσετε το αρχείο.
## Existing ## Existing
addvaultwizard.existing.title=Προσθήκη Υπάρχοντος Κρύπτης
addvaultwizard.existing.instruction=Επιλέξτε το αρχείο "vault.cryptomator" της υπάρχοντος κρύπτης. Αν υπάρχει μόνο ένα αρχείο με όνομα "masterkey.cryptomator", επιλέξτε αυτό. addvaultwizard.existing.instruction=Επιλέξτε το αρχείο "vault.cryptomator" της υπάρχοντος κρύπτης. Αν υπάρχει μόνο ένα αρχείο με όνομα "masterkey.cryptomator", επιλέξτε αυτό.
addvaultwizard.existing.chooseBtn=Επιλογή… addvaultwizard.existing.chooseBtn=Επιλογή…
addvaultwizard.existing.filePickerTitle=Επιλέξτε Αρχείο Κρύπτης addvaultwizard.existing.filePickerTitle=Επιλέξτε Αρχείο Κρύπτης
@@ -126,7 +136,11 @@ unlock.success.revealBtn=Αποκάλυψη εικονικού δίσκου
unlock.error.customPath.message=Αδυναμία προσάρτησης της κρύπτης στην προσαρμοσμένη διαδρομή unlock.error.customPath.message=Αδυναμία προσάρτησης της κρύπτης στην προσαρμοσμένη διαδρομή
unlock.error.customPath.description.notSupported=Εάν θέλετε να συνεχίσετε να χρησιμοποιείτε την προσαρμοσμένη διαδρομή, μεταβείτε στις προτιμήσεις και επιλέξτε έναν τύπο τόμου που την υποστηρίζει. Διαφορετικά, μεταβείτε στις επιλογές της κρύπτης και επιλέξτε ένα υποστηριζόμενο σημείο προσάρτησης. unlock.error.customPath.description.notSupported=Εάν θέλετε να συνεχίσετε να χρησιμοποιείτε την προσαρμοσμένη διαδρομή, μεταβείτε στις προτιμήσεις και επιλέξτε έναν τύπο τόμου που την υποστηρίζει. Διαφορετικά, μεταβείτε στις επιλογές της κρύπτης και επιλέξτε ένα υποστηριζόμενο σημείο προσάρτησης.
unlock.error.customPath.description.notExists=Η προσαρμοσμένη διαδρομή προσάρτησης δεν υπάρχει. Είτε δημιουργήστε την στο τοπικό σύστημα αρχείων σας είτε αλλάξτε την στις επιλογές κρύπτης. unlock.error.customPath.description.notExists=Η προσαρμοσμένη διαδρομή προσάρτησης δεν υπάρχει. Είτε δημιουργήστε την στο τοπικό σύστημα αρχείων σας είτε αλλάξτε την στις επιλογές κρύπτης.
unlock.error.customPath.description.generic=Έχετε επιλέξει μια προσαρμοσμένη διαδρομή προσάρτησης για αυτή την κρύπτη, αλλά η χρήση της απέτυχε με το μήνυμα: %s unlock.error.customPath.description.inUse=Το γράμμα μονάδας δίσκου ή προσαρμοσμένη διαδρομή προσάρτησης "%s" είναι ήδη σε χρήση.
unlock.error.customPath.description.hideawayNotDir=Το προσωρινό, κρυφό αρχείο "%3$s" που χρησιμοποιείται για το ξεκλείδωμα δεν μπορεί να αφαιρεθεί. Παρακαλούμε ελέγξτε το αρχείο και στη συνέχεια διαγράψτε το χειροκίνητα.
unlock.error.customPath.description.couldNotBeCleaned=Η κρύπτη σας δεν μπορεί να τοποθετηθεί στη διαδρομή "%s". Παρακαλώ δοκιμάστε ξανά ή επιλέξτε διαφορετική διαδρομή.
unlock.error.customPath.description.notEmptyDir=Η προσαρμοσμένη διαδρομή προσάρτησης "%s" δεν είναι ένας άδειος φάκελος. Παρακαλώ επιλέξτε έναν άδειο φάκελο και προσπαθήστε ξανά.
unlock.error.customPath.description.generic=Έχετε επιλέξει μια προσαρμοσμένη διαδρομή προσάρτησης για αυτή την κρύπτη, αλλά η χρήση της απέτυχε με το μήνυμα: %2$s
## Hub ## Hub
hub.noKeychain.message=Δεν είναι δυνατή η πρόσβαση στο κλειδί της συσκευής hub.noKeychain.message=Δεν είναι δυνατή η πρόσβαση στο κλειδί της συσκευής
hub.noKeychain.description=Για να ξεκλειδώσετε τις κρύπτες Hub, απαιτείται ένα κλειδί συσκευής, το οποίο ασφαλίζεται με χρήση μπρελόκ. Για να συνεχίσετε, ενεργοποιήστε το "%s" και επιλέξτε ένα keychain στις προτιμήσεις. hub.noKeychain.description=Για να ξεκλειδώσετε τις κρύπτες Hub, απαιτείται ένα κλειδί συσκευής, το οποίο ασφαλίζεται με χρήση μπρελόκ. Για να συνεχίσετε, ενεργοποιήστε το "%s" και επιλέξτε ένα keychain στις προτιμήσεις.
@@ -351,7 +365,9 @@ main.vaultlist.contextMenu.unlock=Ξεκλείδωμα…
main.vaultlist.contextMenu.unlockNow=Ξεκλείδωμα τώρα main.vaultlist.contextMenu.unlockNow=Ξεκλείδωμα τώρα
main.vaultlist.contextMenu.vaultoptions=Εμφάνιση επιλογών Vault main.vaultlist.contextMenu.vaultoptions=Εμφάνιση επιλογών Vault
main.vaultlist.contextMenu.reveal=Αποκάλυψη εικονικού δίσκου main.vaultlist.contextMenu.reveal=Αποκάλυψη εικονικού δίσκου
main.vaultlist.addVaultBtn=Προσθήκη Κρύπτης main.vaultlist.addVaultBtn=Προσθήκη
main.vaultlist.addVaultBtn.menuItemNew=Νέα Κρύπτη...
main.vaultlist.addVaultBtn.menuItemExisting=Υπάρχουσα Κρύπτη...
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Ευχαριστούμε που επιλέξατε το Cryptomator για να προστατεύσετε τα αρχεία σας. Αν χρειάζεστε οποιαδήποτε βοήθεια, ελέγξτε τους οδηγούς για αρχάριους: main.vaultDetail.welcomeOnboarding=Ευχαριστούμε που επιλέξατε το Cryptomator για να προστατεύσετε τα αρχεία σας. Αν χρειάζεστε οποιαδήποτε βοήθεια, ελέγξτε τους οδηγούς για αρχάριους:
@@ -487,4 +503,12 @@ quit.lockAndQuitBtn=Κλείδωμα και Έξοδος
# Forced Quit # Forced Quit
quit.forced.message=Δεν ήταν δυνατό να κλειδωθούν ορισμένες κρύπτες quit.forced.message=Δεν ήταν δυνατό να κλειδωθούν ορισμένες κρύπτες
quit.forced.description=Το κλείδωμα κρυπτών αποκλείστηκε από εκκρεμείς ενέργειες ή από ανοιχτά αρχεία. Μπορείτε να αναγκάσετε το κλείδωμα εναπομείναντων θησαυροφυλάκων, ωστόσο η διακοπή I/O μπορεί να οδηγήσει στην απώλεια μη αποθηκευμένων δεδομένων. quit.forced.description=Το κλείδωμα κρυπτών αποκλείστηκε από εκκρεμείς ενέργειες ή από ανοιχτά αρχεία. Μπορείτε να αναγκάσετε το κλείδωμα εναπομείναντων θησαυροφυλάκων, ωστόσο η διακοπή I/O μπορεί να οδηγήσει στην απώλεια μη αποθηκευμένων δεδομένων.
quit.forced.forceAndQuitBtn=Εξαναγκασμός και Έξοδος quit.forced.forceAndQuitBtn=Εξαναγκασμός και Έξοδος
# Update Reminder
updateReminder.title=Έλεγχος Ενημερώσεων
updateReminder.message=Έλεγχος για ενημερώσεις;
updateReminder.description=Μείνετε ενημερωμένοι με νέες δυνατότητες, διορθώσεις σφαλμάτων και βελτιώσεις ασφάλειας. Συνιστούμε τον αυτόματο έλεγχο για ενημερώσεις.
updateReminder.notNow=Όχι Τώρα
updateReminder.yesOnce=Ναι, Μία Φορά
updateReminder.yesAutomatically=Ναι, Αυτόματα
+27 -7
View File
@@ -20,6 +20,11 @@ error.description=Cryptomator no esperaba que esto sucediera. Puede buscar soluc
error.hyperlink.lookup=Buscar este error error.hyperlink.lookup=Buscar este error
error.hyperlink.report=Notificar este error error.hyperlink.report=Notificar este error
error.technicalDetails=Detalles: error.technicalDetails=Detalles:
error.existingSolutionDescription=Cryptomator no esperaba que esto ocurriera, pero hemos encontrado una solución existente para este error. Eche un vistazo al siguiente enlace.
error.hyperlink.solution=Buscar la solución
error.lookupPermissionMessage=Cryptomator puede buscar una solución en línea para este problema. Esto enviará una solicitud a nuestra base de datos de problemas desde su dirección IP.
error.dismiss=Descartar
error.lookUpSolution=Buscar solución
# Defaults # Defaults
defaults.vault.vaultName=Bóveda defaults.vault.vaultName=Bóveda
@@ -35,9 +40,6 @@ traymenu.vault.reveal=Revelar
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Añadir bóveda addvaultwizard.title=Añadir bóveda
## Welcome
addvaultwizard.welcome.newButton=Crear bóveda nueva
addvaultwizard.welcome.existingButton=Abrir bóveda existente
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Elegir un nombre para la bóveda addvaultwizard.new.nameInstruction=Elegir un nombre para la bóveda
@@ -59,6 +61,12 @@ addvaultwizard.new.validCharacters.message=El nombre de la bóveda puede contene
addvaultwizard.new.validCharacters.chars=Caracteres de la palabra (por ejemplo, a, ж o 수) addvaultwizard.new.validCharacters.chars=Caracteres de la palabra (por ejemplo, a, ж o 수)
addvaultwizard.new.validCharacters.numbers=Números addvaultwizard.new.validCharacters.numbers=Números
addvaultwizard.new.validCharacters.dashes=Guion (%s) o subrayado (%s) addvaultwizard.new.validCharacters.dashes=Guion (%s) o subrayado (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Habilitar ajustes expertos
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Ingrese un valor entre 36 y 220 (por defecto 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Abra la documentación para obtener más información.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Longitud máxima de los nombres de archivo cifrados
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Válido
### Password ### Password
addvaultwizard.new.createVaultBtn=Crear bóveda addvaultwizard.new.createVaultBtn=Crear bóveda
addvaultwizard.new.generateRecoveryKeyChoice=No podrá acceder a sus datos sin su contraseña. ¿Desea una clave de recuperación en caso de que pierda su contraseña? addvaultwizard.new.generateRecoveryKeyChoice=No podrá acceder a sus datos sin su contraseña. ¿Desea una clave de recuperación en caso de que pierda su contraseña?
@@ -126,7 +134,11 @@ unlock.success.revealBtn=Revelar unidad
unlock.error.customPath.message=No se puede montar la bóveda en la ruta personalizada unlock.error.customPath.message=No se puede montar la bóveda en la ruta personalizada
unlock.error.customPath.description.notSupported=Si desea seguir usando la ruta personalizada, vaya a las preferencias y seleccione un tipo de volumen que lo admita. De lo contrario, vaya a las opciones de la bóveda y elija un punto de montaje compatible. unlock.error.customPath.description.notSupported=Si desea seguir usando la ruta personalizada, vaya a las preferencias y seleccione un tipo de volumen que lo admita. De lo contrario, vaya a las opciones de la bóveda y elija un punto de montaje compatible.
unlock.error.customPath.description.notExists=La ruta de montaje personalizada no existe. Créela en su sistema de archivos local o cámbiela en las opciones de la bóveda. unlock.error.customPath.description.notExists=La ruta de montaje personalizada no existe. Créela en su sistema de archivos local o cámbiela en las opciones de la bóveda.
unlock.error.customPath.description.generic=Seleccionó una ruta de montaje personalizada para esta bóveda, pero falló al usarla con el mensaje: %s unlock.error.customPath.description.inUse=La letra de unidad o ruta de montaje personalizada "%s" ya está en uso.
unlock.error.customPath.description.hideawayNotDir=El archivo oculto temporal "%3$s" usado para el desbloqueo no pudo ser eliminado. Compruebe el archivo y elimínelo manualmente.
unlock.error.customPath.description.couldNotBeCleaned=Su bóveda no se pudo montar en la ruta "%s". Intente de nuevo o elija una ruta diferente.
unlock.error.customPath.description.notEmptyDir=La ruta de montaje personalizada "%s" no es una carpeta vacía. Elija una carpeta vacía y vuelva a intentarlo.
unlock.error.customPath.description.generic=Seleccionó una ruta de montaje personalizada para esta bóveda, pero falló al usarla con el mensaje: %2$s
## Hub ## Hub
hub.noKeychain.message=No se puede acceder a la clave del dispositivo hub.noKeychain.message=No se puede acceder a la clave del dispositivo
hub.noKeychain.description=Para desbloquear las bóvedas de Hub, se requiere una clave de dispositivo que se asegura con un llavero. Para continuar, habilite "%s" y seleccione un llavero en las preferencias. hub.noKeychain.description=Para desbloquear las bóvedas de Hub, se requiere una clave de dispositivo que se asegura con un llavero. Para continuar, habilite "%s" y seleccione un llavero en las preferencias.
@@ -164,7 +176,7 @@ lock.forced.description=El bloqueo de "%s" fue bloqueado por operaciones pendien
lock.forced.retryBtn=Reintentar lock.forced.retryBtn=Reintentar
lock.forced.forceBtn=Forzar bloqueo lock.forced.forceBtn=Forzar bloqueo
## Failure ## Failure
lock.fail.message=Error al bloquear la bóveda. lock.fail.message=Error al bloquear la bóveda
lock.fail.description=No se pudo bloquear la bóveda "%s". Asegúrese de que el trabajo no guardado se ha guardado en otro lugar y las operaciones de lectura/escritura importantes han finalizado. Para cerrar la bóveda termine el proceso de Cryptomator. lock.fail.description=No se pudo bloquear la bóveda "%s". Asegúrese de que el trabajo no guardado se ha guardado en otro lugar y las operaciones de lectura/escritura importantes han finalizado. Para cerrar la bóveda termine el proceso de Cryptomator.
# Migration # Migration
@@ -351,7 +363,7 @@ main.vaultlist.contextMenu.unlock=Desbloquear…
main.vaultlist.contextMenu.unlockNow=Desbloquear ahora main.vaultlist.contextMenu.unlockNow=Desbloquear ahora
main.vaultlist.contextMenu.vaultoptions=Mostrar opciones de la bóveda main.vaultlist.contextMenu.vaultoptions=Mostrar opciones de la bóveda
main.vaultlist.contextMenu.reveal=Revelar unidad main.vaultlist.contextMenu.reveal=Revelar unidad
main.vaultlist.addVaultBtn=Añadir bóveda main.vaultlist.addVaultBtn=Añadir
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Gracias por elegir Cryptomator para proteger sus archivos. En caso de necesitar ayuda, revise nuestras guías: main.vaultDetail.welcomeOnboarding=Gracias por elegir Cryptomator para proteger sus archivos. En caso de necesitar ayuda, revise nuestras guías:
@@ -487,4 +499,12 @@ quit.lockAndQuitBtn=Bloquear y salir
# Forced Quit # Forced Quit
quit.forced.message=Algunas bóvedas no pudieron ser bloqueadas quit.forced.message=Algunas bóvedas no pudieron ser bloqueadas
quit.forced.description=El bloqueo de las bóvedas fue impedido por operaciones pendientes o archivos abiertos. Puede forzar a bloquear las bóvedas restantes, sin embargo, la interrupción de E/S puede resultar en la pérdida de datos sin guardar. quit.forced.description=El bloqueo de las bóvedas fue impedido por operaciones pendientes o archivos abiertos. Puede forzar a bloquear las bóvedas restantes, sin embargo, la interrupción de E/S puede resultar en la pérdida de datos sin guardar.
quit.forced.forceAndQuitBtn=Forzar y salir quit.forced.forceAndQuitBtn=Forzar y salir
# Update Reminder
updateReminder.title=Comprobación de actualización
updateReminder.message=¿Buscar actualizaciones?
updateReminder.description=Manténgase actualizado con funciones nuevas, correcciones de errores y mejoras de seguridad. Recomendamos comprobar actualizaciones automáticamente.
updateReminder.notNow=Ahora no
updateReminder.yesOnce=Sí, una vez
updateReminder.yesAutomatically=Sí, automáticamente
@@ -30,9 +30,6 @@ traymenu.vault.reveal=ظاهر
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=اضافه کردن گاوصندوق addvaultwizard.title=اضافه کردن گاوصندوق
## Welcome
addvaultwizard.welcome.newButton=ساخت گاوصندوق جدید
addvaultwizard.welcome.existingButton=باز کردن گاوصندوق موجود
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=یک نام برای گاوصندوق انتخاب کنید addvaultwizard.new.nameInstruction=یک نام برای گاوصندوق انتخاب کنید
@@ -43,6 +40,7 @@ addvaultwizard.new.directoryPickerLabel=مکان سفارشی
addvaultwizard.new.directoryPickerButton=انتخاب کنید… addvaultwizard.new.directoryPickerButton=انتخاب کنید…
addvaultwizard.new.fileAlreadyExists=در حال حاضر یک فایل یا پوشه با همین نام وجود دارد addvaultwizard.new.fileAlreadyExists=در حال حاضر یک فایل یا پوشه با همین نام وجود دارد
addvaultwizard.new.validCharacters.numbers=اعداد addvaultwizard.new.validCharacters.numbers=اعداد
### Expert Settings
### Password ### Password
### Information ### Information
## Existing ## Existing
@@ -111,7 +109,6 @@ main.closeBtn.tooltip=ببند
main.supporterCertificateMissing.tooltip=لطفا کمک مالی در نظر بگیرند main.supporterCertificateMissing.tooltip=لطفا کمک مالی در نظر بگیرند
## Vault List ## Vault List
main.vaultlist.contextMenu.lock=قفل main.vaultlist.contextMenu.lock=قفل
main.vaultlist.addVaultBtn=اضافه کردن گاوصندوق
## Vault Detail ## Vault Detail
### Welcome ### Welcome
### Locked ### Locked
@@ -145,4 +142,6 @@ vaultOptions.mount.mountPoint.directoryPickerButton=انتخاب کنید…
# Quit # Quit
# Forced Quit # Forced Quit
# Update Reminder
+21 -6
View File
@@ -20,6 +20,8 @@ error.description=Cryptomator ei odottanut tämän tapahtuvan. Voit etsiä olema
error.hyperlink.lookup=Etsi tämä virhe error.hyperlink.lookup=Etsi tämä virhe
error.hyperlink.report=Ilmoita ongelmasta error.hyperlink.report=Ilmoita ongelmasta
error.technicalDetails=Tiedot: error.technicalDetails=Tiedot:
error.existingSolutionDescription=Cryptomator ei odottanut tämän tapahtuvan. Mutta löysimme olemassa olevan ratkaisun tähän virheeseen. Ole hyvä ja katso seuraavaa linkkiä.
error.hyperlink.solution=Etsi ratkaisu
# Defaults # Defaults
defaults.vault.vaultName=Vault defaults.vault.vaultName=Vault
@@ -35,9 +37,6 @@ traymenu.vault.reveal=Paljasta
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Lisää Vault addvaultwizard.title=Lisää Vault
## Welcome
addvaultwizard.welcome.newButton=Luo Uusi Vault
addvaultwizard.welcome.existingButton=Avaa Olemassaoleva Vault
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Anna uusi nimi Vaultille addvaultwizard.new.nameInstruction=Anna uusi nimi Vaultille
@@ -59,6 +58,7 @@ addvaultwizard.new.validCharacters.message=Vaultin nimi voi sisältää seuraava
addvaultwizard.new.validCharacters.chars=Sanamerkit (e.g. a, ж or 수) addvaultwizard.new.validCharacters.chars=Sanamerkit (e.g. a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Numerot addvaultwizard.new.validCharacters.numbers=Numerot
addvaultwizard.new.validCharacters.dashes=Hyphen (%s) tai alaviiva (%s) addvaultwizard.new.validCharacters.dashes=Hyphen (%s) tai alaviiva (%s)
### Expert Settings
### Password ### Password
addvaultwizard.new.createVaultBtn=Luo Uusi Vault addvaultwizard.new.createVaultBtn=Luo Uusi Vault
addvaultwizard.new.generateRecoveryKeyChoice=Et voi käyttää tietojasi ilman salasanaasi. Haluatko palautusavaimen siltä varalta, että menetät salasanasi? addvaultwizard.new.generateRecoveryKeyChoice=Et voi käyttää tietojasi ilman salasanaasi. Haluatko palautusavaimen siltä varalta, että menetät salasanasi?
@@ -126,7 +126,6 @@ unlock.success.revealBtn=Paljasta Asema
unlock.error.customPath.message=Holvia ei pystytty yhdistämään valittuun polkuun unlock.error.customPath.message=Holvia ei pystytty yhdistämään valittuun polkuun
unlock.error.customPath.description.notSupported=Mikäli haluat jatkaa mukautetun polun käyttöä, ole hyvä ja mene Asetuksiin ja valitse volyymityyppi mikä tukee sitä. Muussa tapauksessa avaa holvin asetukset ja valitse tuettu mukautettu polku. unlock.error.customPath.description.notSupported=Mikäli haluat jatkaa mukautetun polun käyttöä, ole hyvä ja mene Asetuksiin ja valitse volyymityyppi mikä tukee sitä. Muussa tapauksessa avaa holvin asetukset ja valitse tuettu mukautettu polku.
unlock.error.customPath.description.notExists=Valitsemaasi mukautettua polkua ei ole olemassa. Voit joko luoda uuden polun tai muuttaa polkua holvisi asetuksissa. unlock.error.customPath.description.notExists=Valitsemaasi mukautettua polkua ei ole olemassa. Voit joko luoda uuden polun tai muuttaa polkua holvisi asetuksissa.
unlock.error.customPath.description.generic=Olet valinnut mukautetun polun holvillesi, mutta sen kanssa ilmeni ongelma: %s
## Hub ## Hub
hub.noKeychain.message=Laitteen avainta ei löytynyt hub.noKeychain.message=Laitteen avainta ei löytynyt
hub.noKeychain.description=Hub-holvien purkamiseksi tarvitaan laiteavain joka on suojattu avainrenkaalla. Jatkaaksesi, kytke “%s” päälle ja valitse avainrengas asetuksista. hub.noKeychain.description=Hub-holvien purkamiseksi tarvitaan laiteavain joka on suojattu avainrenkaalla. Jatkaaksesi, kytke “%s” päälle ja valitse avainrengas asetuksista.
@@ -178,13 +177,28 @@ migration.start.remarkCanRun=Sinun tulee varmistaa, että kaikki laitteet joilla
migration.start.remarkSynced=Sinun tulee varmistaa, että holvisi on täysin ajantasalla tällä laitteella ja muilla laitteillasi, ennen kuin aloitat päivitysprosessin. migration.start.remarkSynced=Sinun tulee varmistaa, että holvisi on täysin ajantasalla tällä laitteella ja muilla laitteillasi, ennen kuin aloitat päivitysprosessin.
migration.start.confirm=Olen lukenut ja ymmärtänyt yllä ilmoitetut ohjeet migration.start.confirm=Olen lukenut ja ymmärtänyt yllä ilmoitetut ohjeet
## Run ## Run
migration.run.enterPassword=Kirjoita "%s" salasana
migration.run.startMigrationBtn=Siirrä Holvi
migration.run.progressHint=Tämä saattaa kestää jonkin aikaa…
## Success ## Success
migration.success.nextStepsInstructions="%s" siirretty onnistuneesti.\nVoit nyt avata holvin lukituksen.
migration.success.unlockNow=Avaa Nyt migration.success.unlockNow=Avaa Nyt
## Missing file system capabilities ## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=Tiedostojärjestelmää ei tueta
migration.error.missingFileSystemCapabilities.description=Siirtoa ei aloitettu, koska varastosi sijaitsee riittämättömässä tiedostojärjestelmässä.
migration.error.missingFileSystemCapabilities.reason.LONG_FILENAMES=Tiedostojärjestelmä ei tue pitkiä tiedostonimiä.
migration.error.missingFileSystemCapabilities.reason.LONG_PATHS=Tiedostojärjestelmä ei tue pitkiä polkuja.
migration.error.missingFileSystemCapabilities.reason.READ_ACCESS=Tiedostojärjestelmä ei salli lukemista.
migration.error.missingFileSystemCapabilities.reason.WRITE_ACCESS=Tiedostojärjestelmä ei salli kirjoittamista.
## Impossible ## Impossible
migration.impossible.heading=Holvin siirtäminen ei onnistu
migration.impossible.reason=Varastoa ei voida siirtää automaattisesti, koska sen tallennuspaikka tai tukiasema ei ole yhteensopiva.
migration.impossible.moreInfo=Varasto voidaan edelleen avata vanhemmalla versiolla. Katso ohjeet varaston manuaaliseen siirtämiseen osoitteesta
# Health Check # Health Check
## Start ## Start
health.title="%s" kuntotarkastus
health.intro.header=Kuntotarkastus
## Start Failure ## Start Failure
## Check Selection ## Check Selection
## Detail view ## Detail view
@@ -216,7 +230,6 @@ main.preferencesBtn.tooltip=Asetukset
main.vaultlist.contextMenu.lock=Lukitse main.vaultlist.contextMenu.lock=Lukitse
main.vaultlist.contextMenu.unlockNow=Avaa Nyt main.vaultlist.contextMenu.unlockNow=Avaa Nyt
main.vaultlist.contextMenu.reveal=Paljasta Asema main.vaultlist.contextMenu.reveal=Paljasta Asema
main.vaultlist.addVaultBtn=Lisää Vault
## Vault Detail ## Vault Detail
### Welcome ### Welcome
### Locked ### Locked
@@ -255,4 +268,6 @@ vaultOptions.masterkey.changePasswordBtn=Vaihda salasana
# Quit # Quit
# Forced Quit # Forced Quit
# Update Reminder
@@ -20,6 +20,7 @@ error.description=Oops! Hindi inaasahan ng Cryptomator na ito'y mangyari. Maaari
error.hyperlink.lookup=Hanapin ang solusyon error.hyperlink.lookup=Hanapin ang solusyon
error.hyperlink.report=I-report ang problema error.hyperlink.report=I-report ang problema
error.technicalDetails=Mga detalye: error.technicalDetails=Mga detalye:
error.lookUpSolution=Itignan ang solusyon
# Defaults # Defaults
defaults.vault.vaultName=Vault defaults.vault.vaultName=Vault
@@ -35,9 +36,6 @@ traymenu.vault.reveal=Ipakita
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Magdagdag ng Vault addvaultwizard.title=Magdagdag ng Vault
## Welcome
addvaultwizard.welcome.newButton=Gumawa ng Bagong Vault
addvaultwizard.welcome.existingButton=Magbukas ng Umiiral na Vault
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Pangalanan ang vault addvaultwizard.new.nameInstruction=Pangalanan ang vault
@@ -49,6 +47,8 @@ addvaultwizard.new.locationPrompt=…
addvaultwizard.new.directoryPickerLabel=Custom Location addvaultwizard.new.directoryPickerLabel=Custom Location
addvaultwizard.new.directoryPickerButton=Mamili… addvaultwizard.new.directoryPickerButton=Mamili…
addvaultwizard.new.directoryPickerTitle=Pumili ng Direktoryo addvaultwizard.new.directoryPickerTitle=Pumili ng Direktoryo
### Expert Settings
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Ibukas ang dokumentasyon para matuto pa.
### Password ### Password
addvaultwizard.new.createVaultBtn=Gumawa ng bagong Vault addvaultwizard.new.createVaultBtn=Gumawa ng bagong Vault
### Information ### Information
@@ -69,6 +69,7 @@ removeVault.confirmBtn=Itangal ang vault
# Change Password # Change Password
# Forget Password # Forget Password
forgetPassword.message=Nakalimutan ang iyong password?
# Unlock # Unlock
unlock.savePassword=Maalala ang password unlock.savePassword=Maalala ang password
@@ -135,7 +136,6 @@ main.closeBtn.tooltip=Isara
main.preferencesBtn.tooltip=Mga Kagustuhan main.preferencesBtn.tooltip=Mga Kagustuhan
## Vault List ## Vault List
main.vaultlist.contextMenu.lock=I-lock main.vaultlist.contextMenu.lock=I-lock
main.vaultlist.addVaultBtn=Magdagdag ng Vault
## Vault Detail ## Vault Detail
### Welcome ### Welcome
### Locked ### Locked
@@ -169,4 +169,7 @@ vaultOptions.mount.mountPoint.directoryPickerButton=Mamili…
# Quit # Quit
# Forced Quit # Forced Quit
# Update Reminder
updateReminder.message=I-tsek kung may bagong update?
+33 -9
View File
@@ -20,6 +20,11 @@ error.description=Oups ! Cryptomator ne s'attendait pas à ce que cela se produi
error.hyperlink.lookup=Rechercher cette erreur error.hyperlink.lookup=Rechercher cette erreur
error.hyperlink.report=Signaler cette erreur error.hyperlink.report=Signaler cette erreur
error.technicalDetails=Détails : error.technicalDetails=Détails :
error.existingSolutionDescription=Cryptomator ne s'attendait pas à ce que cela se produise. Mais nous avons trouvé une solution existante pour cette erreur. Veuillez consulter le lien suivant.
error.hyperlink.solution=Rechercher la solution
error.lookupPermissionMessage=Cryptomator peut trouver une solution à ce problème en ligne. Cela enverra une requête à notre base de données de problèmes à partir de votre adresse IP.
error.dismiss=Ignorer
error.lookUpSolution=Rechercher la solution
# Defaults # Defaults
defaults.vault.vaultName=Coffre defaults.vault.vaultName=Coffre
@@ -35,10 +40,8 @@ traymenu.vault.reveal=Révéler
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Ajouter un coffre addvaultwizard.title=Ajouter un coffre
## Welcome
addvaultwizard.welcome.newButton=Créer un nouveau coffre
addvaultwizard.welcome.existingButton=Ouvrir un coffre existant
## New ## New
addvaultwizard.new.title=Ajouter un nouveau coffre
### Name ### Name
addvaultwizard.new.nameInstruction=Choisir un nom pour le coffre addvaultwizard.new.nameInstruction=Choisir un nom pour le coffre
addvaultwizard.new.namePrompt=Nom du coffre addvaultwizard.new.namePrompt=Nom du coffre
@@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Le nom du coffre ne peut contenir que
addvaultwizard.new.validCharacters.chars=Caractères de mot (par exemple a, ж ou 수) addvaultwizard.new.validCharacters.chars=Caractères de mot (par exemple a, ж ou 수)
addvaultwizard.new.validCharacters.numbers=Nombres addvaultwizard.new.validCharacters.numbers=Nombres
addvaultwizard.new.validCharacters.dashes=Tiret (%s) ou tiret du bas (%s) addvaultwizard.new.validCharacters.dashes=Tiret (%s) ou tiret du bas (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Activer les paramètres experts
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Entrez une valeur entre 36 et 220 (par défaut 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Ouvrez la documentation pour en savoir plus.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Longueur maximale des noms de fichiers chiffrés
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valide
### Password ### Password
addvaultwizard.new.createVaultBtn=Créer un coffre addvaultwizard.new.createVaultBtn=Créer un coffre
addvaultwizard.new.generateRecoveryKeyChoice=Il sera impossible daccéder à vos données sans mot de passe. Souhaitez-vous créer une clé de secours en cas d'oubli du mot passe ? addvaultwizard.new.generateRecoveryKeyChoice=Il sera impossible daccéder à vos données sans mot de passe. Souhaitez-vous créer une clé de secours en cas d'oubli du mot passe ?
@@ -69,7 +78,7 @@ addvault.new.readme.storageLocation.fileName=IMPORTANT.rtf
addvault.new.readme.storageLocation.1=Fichiers de coffre-fort addvault.new.readme.storageLocation.1=Fichiers de coffre-fort
addvault.new.readme.storageLocation.2=Ceci est l'emplacement de stockage de votre coffre. addvault.new.readme.storageLocation.2=Ceci est l'emplacement de stockage de votre coffre.
addvault.new.readme.storageLocation.3=NE PAS addvault.new.readme.storageLocation.3=NE PAS
addvault.new.readme.storageLocation.4=modifier les fichiers dans ce répertoire ni addvault.new.readme.storageLocation.4=Modifier n'importe quel fichier dans ce répertoire ou
addvault.new.readme.storageLocation.5=• coller de fichier à chiffrer dans ce répertoire. addvault.new.readme.storageLocation.5=• coller de fichier à chiffrer dans ce répertoire.
addvault.new.readme.storageLocation.6=Si vous voulez chiffrer les fichiers et afficher le contenu du coffre, faites ce qui suit : addvault.new.readme.storageLocation.6=Si vous voulez chiffrer les fichiers et afficher le contenu du coffre, faites ce qui suit :
addvault.new.readme.storageLocation.7=1. Ajouter ce coffre à Cryptomator. addvault.new.readme.storageLocation.7=1. Ajouter ce coffre à Cryptomator.
@@ -82,6 +91,7 @@ addvault.new.readme.accessLocation.2=Ceci est le chemin d'accès de votre coffre
addvault.new.readme.accessLocation.3=Tous les fichiers ajoutés à ce volume seront chiffrés par Cryptomator. Vous pouvez l'utiliser comme n'importe quel lecteur/répertoire. Ceci est seulement une vue déchiffrée de son contenu, vos fichiers restent chiffrés dans votre disque dur en permanence. addvault.new.readme.accessLocation.3=Tous les fichiers ajoutés à ce volume seront chiffrés par Cryptomator. Vous pouvez l'utiliser comme n'importe quel lecteur/répertoire. Ceci est seulement une vue déchiffrée de son contenu, vos fichiers restent chiffrés dans votre disque dur en permanence.
addvault.new.readme.accessLocation.4=Vous pouvez supprimer ce fichier. addvault.new.readme.accessLocation.4=Vous pouvez supprimer ce fichier.
## Existing ## Existing
addvaultwizard.existing.title=Ajouter un coffre existant
addvaultwizard.existing.instruction=Choisissez le fichier « vault.cryptomator » de votre volume existant. Si seul le fichier « masterkey.cryptomator » est présent, sélectionnez celui-là. addvaultwizard.existing.instruction=Choisissez le fichier « vault.cryptomator » de votre volume existant. Si seul le fichier « masterkey.cryptomator » est présent, sélectionnez celui-là.
addvaultwizard.existing.chooseBtn=Choisir... addvaultwizard.existing.chooseBtn=Choisir...
addvaultwizard.existing.filePickerTitle=Sélectionnez le fichier correspondant au volume chiffré addvaultwizard.existing.filePickerTitle=Sélectionnez le fichier correspondant au volume chiffré
@@ -126,7 +136,11 @@ unlock.success.revealBtn=Révéler le lecteur
unlock.error.customPath.message=Impossible de monter le coffre vers le chemin personnalisé unlock.error.customPath.message=Impossible de monter le coffre vers le chemin personnalisé
unlock.error.customPath.description.notSupported=Si vous souhaitez continuer à utiliser le chemin personnalisé, veuillez aller dans les préférences et sélectionner un type de volume qui le prend en charge. Sinon, allez dans les options du coffre et choisissez un point de montage pris en charge. unlock.error.customPath.description.notSupported=Si vous souhaitez continuer à utiliser le chemin personnalisé, veuillez aller dans les préférences et sélectionner un type de volume qui le prend en charge. Sinon, allez dans les options du coffre et choisissez un point de montage pris en charge.
unlock.error.customPath.description.notExists=Le chemin de montage personnalisé n'existe pas. Créez-le dans votre système de fichiers local ou modifiez-le dans les options du coffre. unlock.error.customPath.description.notExists=Le chemin de montage personnalisé n'existe pas. Créez-le dans votre système de fichiers local ou modifiez-le dans les options du coffre.
unlock.error.customPath.description.generic=Vous avez sélectionné un chemin de montage personnalisé pour ce coffre, mais son utilisation a échoué avec le message : %s unlock.error.customPath.description.inUse=La lettre de lecteur ou le point de montage personnalisé «%s» est déjà utilisé.
unlock.error.customPath.description.hideawayNotDir=Le fichier temporaire et caché «%3$s» utilisé pour déverrouiller n'a pas pu être supprimé. Veuillez vérifier le fichier puis le supprimer manuellement.
unlock.error.customPath.description.couldNotBeCleaned=Votre coffre n'a pas pu être monté au point "%s". Veuillez réessayer ou choisissez un autre point.
unlock.error.customPath.description.notEmptyDir=Le chemin de montage personnalisé "%s" n'est pas un dossier vide. Veuillez choisir un dossier vide et réessayez.
unlock.error.customPath.description.generic=Vous avez sélectionné un point de montage personnalisé pour ce coffre, mais son utilisation a échoué avec le message : %2$s
## Hub ## Hub
hub.noKeychain.message=Impossible d'accéder à la clé du périphérique hub.noKeychain.message=Impossible d'accéder à la clé du périphérique
hub.noKeychain.description=Le déverrouillage des coffres Hub nécessite une clé de périphérique sécurisée à l'aide d'un trousseau. Pour continuer, activez « %s » et sélectionnez un trousseau dans les préférences. hub.noKeychain.description=Le déverrouillage des coffres Hub nécessite une clé de périphérique sécurisée à l'aide d'un trousseau. Pour continuer, activez « %s » et sélectionnez un trousseau dans les préférences.
@@ -351,7 +365,9 @@ main.vaultlist.contextMenu.unlock=Déverrouiller…
main.vaultlist.contextMenu.unlockNow=Déverrouiller maintenant main.vaultlist.contextMenu.unlockNow=Déverrouiller maintenant
main.vaultlist.contextMenu.vaultoptions=Afficher les options du volume chiffré main.vaultlist.contextMenu.vaultoptions=Afficher les options du volume chiffré
main.vaultlist.contextMenu.reveal=Afficher le lecteur main.vaultlist.contextMenu.reveal=Afficher le lecteur
main.vaultlist.addVaultBtn=Ajouter un volume chiffré main.vaultlist.addVaultBtn=Ajouter
main.vaultlist.addVaultBtn.menuItemNew=Nouveau coffre...
main.vaultlist.addVaultBtn.menuItemExisting=Coffre existant...
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Merci d'avoir choisi Cryptomator pour protéger vos fichiers. Si vous avez besoin d'aide, consultez nos guides de démarrage : main.vaultDetail.welcomeOnboarding=Merci d'avoir choisi Cryptomator pour protéger vos fichiers. Si vous avez besoin d'aide, consultez nos guides de démarrage :
@@ -435,7 +451,7 @@ vaultOptions.masterkey.showRecoveryKeyBtn=Afficher la clé de récupération
vaultOptions.masterkey.recoverPasswordBtn=Réinitialiser le mot de passe vaultOptions.masterkey.recoverPasswordBtn=Réinitialiser le mot de passe
## Hub ## Hub
vaultOptions.hub=Récupération vaultOptions.hub=Récupération
vaultOptions.hub.convertInfo=Vous pouvez utiliser la clé de récupération pour convertir ce coffre Hub en coffre basé sur un mot de passe en cas d'urgence. vaultOptions.hub.convertInfo=Vous pouvez utiliser la clé de récupération pour convertir ce coffre Hub en coffre à mot de passe en cas d'urgence.
vaultOptions.hub.convertBtn=Convertir en coffre-fort basé sur mot de passe vaultOptions.hub.convertBtn=Convertir en coffre-fort basé sur mot de passe
# Recovery Key # Recovery Key
@@ -448,7 +464,7 @@ recoveryKey.display.StorageHints=Gardez-la dans un endroit sûr, par ex. :\n •
## Reset Password ## Reset Password
### Enter Recovery Key ### Enter Recovery Key
recoveryKey.recover.title=Réinitialiser le mot de passe recoveryKey.recover.title=Réinitialiser le mot de passe
recoveryKey.recover.prompt=Entrez la clé de récupération pour "%s " : recoveryKey.recover.prompt=Entrez la clé de récupération pour "%s" :
recoveryKey.recover.correctKey=Cette clé de récupération est correcte recoveryKey.recover.correctKey=Cette clé de récupération est correcte
recoveryKey.recover.wrongKey=Cette clé de récupération appartient à un autre coffre recoveryKey.recover.wrongKey=Cette clé de récupération appartient à un autre coffre
recoveryKey.recover.invalidKey=Cette clé de récupération n'est pas valide recoveryKey.recover.invalidKey=Cette clé de récupération n'est pas valide
@@ -487,4 +503,12 @@ quit.lockAndQuitBtn=Verrouiller et quitter
# Forced Quit # Forced Quit
quit.forced.message=Certains coffres n'ont pas pu être verrouillés quit.forced.message=Certains coffres n'ont pas pu être verrouillés
quit.forced.description=Le verrouillage des coffres a été bloqué par des opérations en attente ou des fichiers ouverts. Vous pouvez forcer le verrouillage des coffres restants, mais l'interruption d'E/S peut entraîner la perte de données non enregistrées. quit.forced.description=Le verrouillage des coffres a été bloqué par des opérations en attente ou des fichiers ouverts. Vous pouvez forcer le verrouillage des coffres restants, mais l'interruption d'E/S peut entraîner la perte de données non enregistrées.
quit.forced.forceAndQuitBtn=Forcer la fermeture quit.forced.forceAndQuitBtn=Forcer la fermeture
# Update Reminder
updateReminder.title=Recherche de mise à jour
updateReminder.message=Rechercher des mises à jour ?
updateReminder.description=Restez à jour avec de nouvelles fonctionnalités, des corrections de bugs et des améliorations de sécurité. La vérification automatique des mises à jour est recommandée.
updateReminder.notNow=Plus tard
updateReminder.yesOnce=Cette fois seulement
updateReminder.yesAutomatically=Oui, automatiquement
@@ -22,10 +22,10 @@ error.message=Produciuse un erro
# Tray Menu # Tray Menu
# Add Vault Wizard # Add Vault Wizard
## Welcome
## New ## New
### Name ### Name
### Location ### Location
### Expert Settings
### Password ### Password
### Information ### Information
## Existing ## Existing
@@ -120,4 +120,6 @@ main.closeBtn.tooltip=Pechar
# Quit # Quit
# Forced Quit # Forced Quit
# Update Reminder
@@ -35,9 +35,6 @@ traymenu.vault.reveal=חשוף
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=הוספת כספת addvaultwizard.title=הוספת כספת
## Welcome
addvaultwizard.welcome.newButton=צור כספת חדשה
addvaultwizard.welcome.existingButton=פתיחת כספת קיימת
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=בחירת שם עבור הכספת addvaultwizard.new.nameInstruction=בחירת שם עבור הכספת
@@ -59,6 +56,7 @@ addvaultwizard.new.validCharacters.message=שם כספת יכול לכלול א
addvaultwizard.new.validCharacters.chars=תווי מילים (למשל: a, ж or 수) addvaultwizard.new.validCharacters.chars=תווי מילים (למשל: a, ж or 수)
addvaultwizard.new.validCharacters.numbers=מספרים addvaultwizard.new.validCharacters.numbers=מספרים
addvaultwizard.new.validCharacters.dashes=מקף (%s) או קו תחתון (%s) addvaultwizard.new.validCharacters.dashes=מקף (%s) או קו תחתון (%s)
### Expert Settings
### Password ### Password
addvaultwizard.new.createVaultBtn=צור כספת חדשה addvaultwizard.new.createVaultBtn=צור כספת חדשה
addvaultwizard.new.generateRecoveryKeyChoice=לא תיהיה אפשרות לקבל גישה למידע שלך בלי הסיסמה שלך. האם תרצה/י מפתח שחזור למקרה ותאבד/י את הסיסמה שלך? addvaultwizard.new.generateRecoveryKeyChoice=לא תיהיה אפשרות לקבל גישה למידע שלך בלי הסיסמה שלך. האם תרצה/י מפתח שחזור למקרה ותאבד/י את הסיסמה שלך?
@@ -126,7 +124,7 @@ unlock.success.revealBtn=חשוף את הכונן
unlock.error.customPath.message=כשלון בקישור הכספת לנתיב הידני שהוגדר unlock.error.customPath.message=כשלון בקישור הכספת לנתיב הידני שהוגדר
unlock.error.customPath.description.notSupported=אם ברצונך להשתמש בנתיב ידני, אנא גש להעדפות ובחר סוג volume שתומך בכך. אחרת, לך לאפשרויות הכספת ובחר אפשרות יעד קישור נתמך. unlock.error.customPath.description.notSupported=אם ברצונך להשתמש בנתיב ידני, אנא גש להעדפות ובחר סוג volume שתומך בכך. אחרת, לך לאפשרויות הכספת ובחר אפשרות יעד קישור נתמך.
unlock.error.customPath.description.notExists=יעד הקישור הידני לא קיים. או שתיצור אותו במערכת הקבצים המקומית או שנה אותו באפשרויות הכספת. unlock.error.customPath.description.notExists=יעד הקישור הידני לא קיים. או שתיצור אותו במערכת הקבצים המקומית או שנה אותו באפשרויות הכספת.
unlock.error.customPath.description.generic=אתה בחרת באפשרות יעד קישור ידני לכספת זו, אבל השימוש בו נכשל עם ההודעה: %s unlock.error.customPath.description.hideawayNotDir=הקובץ הזמני, הנסתר %3$s עבור פתיחה לא ניתן להסרה. יש לבדוק את הקובץ ולמחוק אותו ידנית.
## Hub ## Hub
hub.noKeychain.message=לא ניתן לגשת למפתח המכשיר hub.noKeychain.message=לא ניתן לגשת למפתח המכשיר
hub.noKeychain.description=כדאי לשחרר כספות האב נדרש מפתח מכשיר שיאובטח בצרור מפתחות. כדאי להמשיך, אפשר ״%s״ ובחר את צרור המפתחות בהעדפות. hub.noKeychain.description=כדאי לשחרר כספות האב נדרש מפתח מכשיר שיאובטח בצרור מפתחות. כדאי להמשיך, אפשר ״%s״ ובחר את צרור המפתחות בהעדפות.
@@ -351,7 +349,7 @@ main.vaultlist.contextMenu.unlock=שחרר נעילה…
main.vaultlist.contextMenu.unlockNow=בטל נעילה כעת main.vaultlist.contextMenu.unlockNow=בטל נעילה כעת
main.vaultlist.contextMenu.vaultoptions=הצג את אפשרויות הכספת main.vaultlist.contextMenu.vaultoptions=הצג את אפשרויות הכספת
main.vaultlist.contextMenu.reveal=חשוף את הכונן main.vaultlist.contextMenu.reveal=חשוף את הכונן
main.vaultlist.addVaultBtn=יצירת כספת main.vaultlist.addVaultBtn=הוספה
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=תודה שבחרת ב- Cryptomator להגן על הקבצים שלך. אם אתה זקוק לסיוע, אנא עיין במדריכים שלנו: main.vaultDetail.welcomeOnboarding=תודה שבחרת ב- Cryptomator להגן על הקבצים שלך. אם אתה זקוק לסיוע, אנא עיין במדריכים שלנו:
@@ -479,4 +477,6 @@ quit.lockAndQuitBtn=נעילה ויציאה
# Forced Quit # Forced Quit
quit.forced.message=חלק מה vaults לא היו ניתנים לנעילה quit.forced.message=חלק מה vaults לא היו ניתנים לנעילה
quit.forced.description=נעילה כספות נחסמה על ידי תהליכים ממתינים או קבצים פתוחים. אתה יכול לנעול את הכספת בכוח, אולם הפרעה לפעולת קריאה וכתיבה עשויה לגרום לאובדן מידע לא שמור. quit.forced.description=נעילה כספות נחסמה על ידי תהליכים ממתינים או קבצים פתוחים. אתה יכול לנעול את הכספת בכוח, אולם הפרעה לפעולת קריאה וכתיבה עשויה לגרום לאובדן מידע לא שמור.
quit.forced.forceAndQuitBtn=נעילה בכח ויציאה quit.forced.forceAndQuitBtn=נעילה בכח ויציאה
# Update Reminder
@@ -35,9 +35,6 @@ traymenu.vault.reveal=प्रत्यक्ष करें
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=वाउल्ट डालें addvaultwizard.title=वाउल्ट डालें
## Welcome
addvaultwizard.welcome.newButton=नया वाउल्ट बनाएं
addvaultwizard.welcome.existingButton=मौजूदा वाउल्ट खोलें
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=वाउल्ट के लिए नाम चुनें addvaultwizard.new.nameInstruction=वाउल्ट के लिए नाम चुनें
@@ -57,6 +54,7 @@ addvaultwizard.new.invalidName=तिजोरी के लिए इस ना
addvaultwizard.new.validName=आप इस नाम का उपयोग कर सकते हैं addvaultwizard.new.validName=आप इस नाम का उपयोग कर सकते हैं
addvaultwizard.new.validCharacters.message=नाम के लिए केवल इन वर्णों का उपयोग कर सकते हैं addvaultwizard.new.validCharacters.message=नाम के लिए केवल इन वर्णों का उपयोग कर सकते हैं
addvaultwizard.new.validCharacters.numbers=नंबर addvaultwizard.new.validCharacters.numbers=नंबर
### Expert Settings
### Password ### Password
addvaultwizard.new.createVaultBtn=वॉल्ट बनाएं addvaultwizard.new.createVaultBtn=वॉल्ट बनाएं
addvaultwizard.new.generateRecoveryKeyChoice=आप अपने पासवर्ड के बिना अपने डेटा तक नहीं पहुंच पाएंगे। क्या आप उस वक़्त के लिए एक पुनर्प्राप्ति कुंजी चाहते हैं जब आप अपना पासवर्ड खो देते हैं? addvaultwizard.new.generateRecoveryKeyChoice=आप अपने पासवर्ड के बिना अपने डेटा तक नहीं पहुंच पाएंगे। क्या आप उस वक़्त के लिए एक पुनर्प्राप्ति कुंजी चाहते हैं जब आप अपना पासवर्ड खो देते हैं?
@@ -211,7 +209,6 @@ main.vaultlist.contextMenu.unlock=अनलॉक करें...
main.vaultlist.contextMenu.unlockNow=अब अनलॉक करें main.vaultlist.contextMenu.unlockNow=अब अनलॉक करें
main.vaultlist.contextMenu.vaultoptions=वॉल्ट के विकल्प दिखाए main.vaultlist.contextMenu.vaultoptions=वॉल्ट के विकल्प दिखाए
main.vaultlist.contextMenu.reveal=फोल्डर खोलें main.vaultlist.contextMenu.reveal=फोल्डर खोलें
main.vaultlist.addVaultBtn=वाउल्ट डालें
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Cryptomator को अपनी फाइल्स सिराक्षित रखने को चुनने के लिए धन्यवाद। अगर आपको सहायता चाइये, तो हमारी गेटिंग स्टार्टेड गाइगाइड्स देखिये: main.vaultDetail.welcomeOnboarding=Cryptomator को अपनी फाइल्स सिराक्षित रखने को चुनने के लिए धन्यवाद। अगर आपको सहायता चाइये, तो हमारी गेटिंग स्टार्टेड गाइगाइड्स देखिये:
@@ -277,4 +274,6 @@ passwordStrength.messageLabel.4=बहुत मजबूत
quit.title=एप्लीकेशन को बंद करें quit.title=एप्लीकेशन को बंद करें
# Forced Quit # Forced Quit
quit.forced.message=कुछ वॉल्ट्स लॉक नहीं हो पायी quit.forced.message=कुछ वॉल्ट्स लॉक नहीं हो पायी
# Update Reminder
@@ -35,9 +35,6 @@ traymenu.vault.reveal=Otkrij
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Dodaj trezor addvaultwizard.title=Dodaj trezor
## Welcome
addvaultwizard.welcome.newButton=Izradi novi trezor
addvaultwizard.welcome.existingButton=Otvori postojeći trezor
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Odaberi ime za trezor addvaultwizard.new.nameInstruction=Odaberi ime za trezor
@@ -53,6 +50,7 @@ addvaultwizard.new.fileAlreadyExists=Datoteka ili mapa s nazivom trezora već po
addvaultwizard.new.locationDoesNotExist=Mapa u navedenoj putanji ne postoji ili joj se ne može pristupiti addvaultwizard.new.locationDoesNotExist=Mapa u navedenoj putanji ne postoji ili joj se ne može pristupiti
addvaultwizard.new.locationIsNotWritable=Nemate pravo pisanja u navedenu mapu addvaultwizard.new.locationIsNotWritable=Nemate pravo pisanja u navedenu mapu
addvaultwizard.new.locationIsOk=Prikladna lokacija za Vaš trezor addvaultwizard.new.locationIsOk=Prikladna lokacija za Vaš trezor
### Expert Settings
### Password ### Password
addvaultwizard.new.createVaultBtn=Izradi trezor addvaultwizard.new.createVaultBtn=Izradi trezor
addvaultwizard.new.generateRecoveryKeyChoice=Nećete moći pristupiti svojim podacima bez lozinke. Želite li ključ za oporavak za slučaj gubitka lozinke? addvaultwizard.new.generateRecoveryKeyChoice=Nećete moći pristupiti svojim podacima bez lozinke. Želite li ključ za oporavak za slučaj gubitka lozinke?
@@ -276,7 +274,7 @@ main.vaultlist.contextMenu.unlock=Otključaj…
main.vaultlist.contextMenu.unlockNow=Otključaj sada main.vaultlist.contextMenu.unlockNow=Otključaj sada
main.vaultlist.contextMenu.vaultoptions=Prikaži opcije trezora main.vaultlist.contextMenu.vaultoptions=Prikaži opcije trezora
main.vaultlist.contextMenu.reveal=Otkrij pogon main.vaultlist.contextMenu.reveal=Otkrij pogon
main.vaultlist.addVaultBtn=Dodaj trezor main.vaultlist.addVaultBtn=Dodaj
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Hvala što ste odabrali Cryptomator za zaštitu Vaših datoteka. Ukoliko trebate pomoć, provjerite naše vodiče za početak rada: main.vaultDetail.welcomeOnboarding=Hvala što ste odabrali Cryptomator za zaštitu Vaših datoteka. Ukoliko trebate pomoć, provjerite naše vodiče za početak rada:
@@ -378,4 +376,6 @@ passwordStrength.messageLabel.4=Vrlo jaka
# Quit # Quit
quit.lockAndQuitBtn=Zaključaj i napusti quit.lockAndQuitBtn=Zaključaj i napusti
# Forced Quit # Forced Quit
# Update Reminder
+22 -6
View File
@@ -20,6 +20,8 @@ error.description=Upsz! A Cryptomator nem számított rá, hogy ez megtörténik
error.hyperlink.lookup=Hiba okának keresése error.hyperlink.lookup=Hiba okának keresése
error.hyperlink.report=Hiba jelentése error.hyperlink.report=Hiba jelentése
error.technicalDetails=Részletek: error.technicalDetails=Részletek:
error.existingSolutionDescription=A Cryptomator nem számított arra, hogy ez megtörténjen. Viszont már találtunk egy létező megoldást erre a problémára. Kérem, látogassa meg az alábbi linket.
error.hyperlink.solution=Megoldás megnézése
# Defaults # Defaults
defaults.vault.vaultName=Széf defaults.vault.vaultName=Széf
@@ -35,9 +37,6 @@ traymenu.vault.reveal=Megmutatás
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Széf hozzáadása addvaultwizard.title=Széf hozzáadása
## Welcome
addvaultwizard.welcome.newButton=Új széf létrehozása
addvaultwizard.welcome.existingButton=Meglévő széf megnyitása
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Válasszon egy nevet az új széf számára addvaultwizard.new.nameInstruction=Válasszon egy nevet az új széf számára
@@ -59,6 +58,12 @@ addvaultwizard.new.validCharacters.message=A vault neve a következő karakterek
addvaultwizard.new.validCharacters.chars=Szókarakterek (pl. a, ж vagy 수) addvaultwizard.new.validCharacters.chars=Szókarakterek (pl. a, ж vagy 수)
addvaultwizard.new.validCharacters.numbers=Számok addvaultwizard.new.validCharacters.numbers=Számok
addvaultwizard.new.validCharacters.dashes=Kötőjel (%s) vagy alulvonás (%s) addvaultwizard.new.validCharacters.dashes=Kötőjel (%s) vagy alulvonás (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Haladó beállítások engedélyezése
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Írjon be egy értéket 36 és 220 között (alapértelmezett: 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=További információkért olvassa el a dokumentációt.
addvaultwizard.new.expertSettings.shorteningThreshold.title=A kódolt fájlnevek maximális hosszúsága
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Érvényes
### Password ### Password
addvaultwizard.new.createVaultBtn=Új széf létrehozása addvaultwizard.new.createVaultBtn=Új széf létrehozása
addvaultwizard.new.generateRecoveryKeyChoice=Nem fog tudni hozzáférni az adataihoz a jelszó nélkül. Akar egy visszaállítási kulcsot arra az esetre, ha elveszíti a jelszavát? addvaultwizard.new.generateRecoveryKeyChoice=Nem fog tudni hozzáférni az adataihoz a jelszó nélkül. Akar egy visszaállítási kulcsot arra az esetre, ha elveszíti a jelszavát?
@@ -126,7 +131,10 @@ unlock.success.revealBtn=Széf megjelenítése
unlock.error.customPath.message=Nem lehet csatolni a széfet az egyéni útvonalhoz unlock.error.customPath.message=Nem lehet csatolni a széfet az egyéni útvonalhoz
unlock.error.customPath.description.notSupported=Ha szeretné továbbra is az egyéni útvonalat használni, kérem, menjen a beállításokba és válasszon egy kötet típust, amely támogatja azt. Máskülönben, menjen a széf opciókhoz és válasszon egy támogatott csatoláspontot. unlock.error.customPath.description.notSupported=Ha szeretné továbbra is az egyéni útvonalat használni, kérem, menjen a beállításokba és válasszon egy kötet típust, amely támogatja azt. Máskülönben, menjen a széf opciókhoz és válasszon egy támogatott csatoláspontot.
unlock.error.customPath.description.notExists=Az egyéni csatolás útvonal nem létezik. Hozza létre a helyi fájlrendszerében vagy változtassa meg a széf opciókban. unlock.error.customPath.description.notExists=Az egyéni csatolás útvonal nem létezik. Hozza létre a helyi fájlrendszerében vagy változtassa meg a széf opciókban.
unlock.error.customPath.description.generic=Egyéni csatolási útvonalat választott ehhez a széfhez, de használatakor ez a hibaüzenet érkezett: %s unlock.error.customPath.description.inUse=A meghajtó betűjele vagy a csatolási útvonal: "%s" már foglalt.
unlock.error.customPath.description.couldNotBeCleaned=A széfet nem lehetett a "%s" elérési útvonalra csatlakoztatni. Kérjük, próbálja meg újra, vagy válasszon másik elérési útvonalat.
unlock.error.customPath.description.notEmptyDir=A megadott "%s" elérési útvonal nem egy üres mappa. Kérjük, válasszon egy üres mappát, és próbálja meg újra.
unlock.error.customPath.description.generic=Egyéni csatolási útvonalat választott ehhez a széfhez, de használatakor ez a hibaüzenet érkezett: %2$s
## Hub ## Hub
hub.noKeychain.message=Nem lehet az eszközkulcshoz hozzáférni hub.noKeychain.message=Nem lehet az eszközkulcshoz hozzáférni
hub.noKeychain.description=Hogy feloldja a Hub széfeket, egy eszközkulcs szükséges, mely egy kulcslánccal van biztosítva. A folytatáshoz engedélyezze a következőt: “%s” és válasszon egy kulcsláncot a beállításokban. hub.noKeychain.description=Hogy feloldja a Hub széfeket, egy eszközkulcs szükséges, mely egy kulcslánccal van biztosítva. A folytatáshoz engedélyezze a következőt: “%s” és válasszon egy kulcsláncot a beállításokban.
@@ -351,7 +359,7 @@ main.vaultlist.contextMenu.unlock=Feloldás…
main.vaultlist.contextMenu.unlockNow=Azonnali feloldás main.vaultlist.contextMenu.unlockNow=Azonnali feloldás
main.vaultlist.contextMenu.vaultoptions=Széf beállítások main.vaultlist.contextMenu.vaultoptions=Széf beállítások
main.vaultlist.contextMenu.reveal=Széf megjelenítése main.vaultlist.contextMenu.reveal=Széf megjelenítése
main.vaultlist.addVaultBtn=Széf hozzáadása main.vaultlist.addVaultBtn=Hozzáadás
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Köszönjük, hogy a Cryptomator programot választotta a fájlai védelmére. Ha segítségre van szüksége, akkor olvassa el a kezdő útmutatónk lépéseit: main.vaultDetail.welcomeOnboarding=Köszönjük, hogy a Cryptomator programot választotta a fájlai védelmére. Ha segítségre van szüksége, akkor olvassa el a kezdő útmutatónk lépéseit:
@@ -487,4 +495,12 @@ quit.lockAndQuitBtn=Zárolás és kilépés
# Forced Quit # Forced Quit
quit.forced.message=Egyes széfeket nem lehetett lezárni quit.forced.message=Egyes széfeket nem lehetett lezárni
quit.forced.description=A széfek zárolását függőbben lévő műveletek vagy megnyitott fájlok blokkolták. Kényszerítheti a maradék széfek zárolását, de az I/O megszakítása nem mentett adatok elvesztéséhez vezethet. quit.forced.description=A széfek zárolását függőbben lévő műveletek vagy megnyitott fájlok blokkolták. Kényszerítheti a maradék széfek zárolását, de az I/O megszakítása nem mentett adatok elvesztéséhez vezethet.
quit.forced.forceAndQuitBtn=Kényszerítés és Kilépés quit.forced.forceAndQuitBtn=Kényszerítés és Kilépés
# Update Reminder
updateReminder.title=Frissítések keresése
updateReminder.message=Frissítések ellenőrzése?
updateReminder.description=Maradjon naprakész az új funkciókkal, hibajavításokkal és biztonsági fejlesztésekkel. Javasoljuk, hogy automatikusan ellenőrizze a frissítéseket.
updateReminder.notNow=Most nem
updateReminder.yesOnce=Igen, egyszer
updateReminder.yesAutomatically=Igen, automatikusan
@@ -35,9 +35,6 @@ traymenu.vault.reveal=Perlihatkan
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Tambah Vault addvaultwizard.title=Tambah Vault
## Welcome
addvaultwizard.welcome.newButton=Buat Vault Baru
addvaultwizard.welcome.existingButton=Buka Vault yang Tersedia
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Beri nama untuk vault berikut addvaultwizard.new.nameInstruction=Beri nama untuk vault berikut
@@ -53,6 +50,7 @@ addvaultwizard.new.fileAlreadyExists=Sudah ada file atau direktori dengan nama v
addvaultwizard.new.locationDoesNotExist=Direktori pada path yang dipilih tidak tersedia atau tidak dapat diakses addvaultwizard.new.locationDoesNotExist=Direktori pada path yang dipilih tidak tersedia atau tidak dapat diakses
addvaultwizard.new.locationIsNotWritable=Anda tidak memiliki hak akses untuk menulis pada path yang dipilih addvaultwizard.new.locationIsNotWritable=Anda tidak memiliki hak akses untuk menulis pada path yang dipilih
addvaultwizard.new.locationIsOk=Lokasi yang sesuai dengan vault Anda addvaultwizard.new.locationIsOk=Lokasi yang sesuai dengan vault Anda
### Expert Settings
### Password ### Password
addvaultwizard.new.createVaultBtn=Buat Vault addvaultwizard.new.createVaultBtn=Buat Vault
addvaultwizard.new.generateRecoveryKeyChoice=Anda tidak dapat mengakses data tanpa kata sandi yang Anda miliki. Apa Anda ingin sebuah kunci pemulihan untuk berjaga-jaga jika seandainya Anda kehilangan kata sandi? addvaultwizard.new.generateRecoveryKeyChoice=Anda tidak dapat mengakses data tanpa kata sandi yang Anda miliki. Apa Anda ingin sebuah kunci pemulihan untuk berjaga-jaga jika seandainya Anda kehilangan kata sandi?
@@ -276,7 +274,6 @@ main.vaultlist.contextMenu.unlock=Buka Kunci…
main.vaultlist.contextMenu.unlockNow=Buka Kunci Sekarang main.vaultlist.contextMenu.unlockNow=Buka Kunci Sekarang
main.vaultlist.contextMenu.vaultoptions=Tampilkan Opsi Vault main.vaultlist.contextMenu.vaultoptions=Tampilkan Opsi Vault
main.vaultlist.contextMenu.reveal=Buka Drive main.vaultlist.contextMenu.reveal=Buka Drive
main.vaultlist.addVaultBtn=Tambah Vault
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Terima kasih telah memilih Cryptomator untuk melindungi file Anda. Jika Anda memerlukan bantuan, lihat panduan awal kami: main.vaultDetail.welcomeOnboarding=Terima kasih telah memilih Cryptomator untuk melindungi file Anda. Jika Anda memerlukan bantuan, lihat panduan awal kami:
@@ -378,4 +375,6 @@ passwordStrength.messageLabel.4=Sangat kuat
# Quit # Quit
quit.lockAndQuitBtn=Kunci dan Keluar quit.lockAndQuitBtn=Kunci dan Keluar
# Forced Quit # Forced Quit
# Update Reminder
+30 -6
View File
@@ -20,6 +20,11 @@ error.description=Oops! Cryptomator non si aspettava che ciò accadesse. Puoi ce
error.hyperlink.lookup=Cerca questo errore error.hyperlink.lookup=Cerca questo errore
error.hyperlink.report=Segnala questo errore error.hyperlink.report=Segnala questo errore
error.technicalDetails=Dettagli: error.technicalDetails=Dettagli:
error.existingSolutionDescription=Cryptomator non si aspettava che questo problema accadesse. Ma abbiamo trovato una soluzione a questo errore. Dai un'occhiata al seguente link.
error.hyperlink.solution=Cerca la soluzione
error.lookupPermissionMessage=Cryptomator può cercare una soluzione a questo problema online. Invierà una richiesta al nostro database dei problemi, dal tuo indirizzo IP.
error.dismiss=Ignora
error.lookUpSolution=Cerca la Soluzione
# Defaults # Defaults
defaults.vault.vaultName=Cassaforte defaults.vault.vaultName=Cassaforte
@@ -35,10 +40,8 @@ traymenu.vault.reveal=Mostra
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Aggiungi Cassaforte addvaultwizard.title=Aggiungi Cassaforte
## Welcome
addvaultwizard.welcome.newButton=Crea Nuova Cassaforte
addvaultwizard.welcome.existingButton=Apri Cassaforte Esistente
## New ## New
addvaultwizard.new.title=Aggiungi una Nuova Cassaforte
### Name ### Name
addvaultwizard.new.nameInstruction=Scegli un nome per la cassaforte addvaultwizard.new.nameInstruction=Scegli un nome per la cassaforte
addvaultwizard.new.namePrompt=Nome della Cassaforte addvaultwizard.new.namePrompt=Nome della Cassaforte
@@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Il nome della cassaforte può contene
addvaultwizard.new.validCharacters.chars=Caratteri della parola (e.g. a, ж or 수) addvaultwizard.new.validCharacters.chars=Caratteri della parola (e.g. a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Numeri addvaultwizard.new.validCharacters.numbers=Numeri
addvaultwizard.new.validCharacters.dashes=Trattino (%s) o tratto basso (%s) addvaultwizard.new.validCharacters.dashes=Trattino (%s) o tratto basso (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Abilita le impostazioni avanzate
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Inserisci un valore compreso tra 36 e 220 (predefinito 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Apri la documentazione per saperne di più.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Lunghezza massima dei nomi dei file crittografati
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Valido
### Password ### Password
addvaultwizard.new.createVaultBtn=Crea Cassaforte addvaultwizard.new.createVaultBtn=Crea Cassaforte
addvaultwizard.new.generateRecoveryKeyChoice=Non potrai accedere ai tuoi dati senza la tua password. Desideri una chiave di recupero nel caso dovessi perdere la password? addvaultwizard.new.generateRecoveryKeyChoice=Non potrai accedere ai tuoi dati senza la tua password. Desideri una chiave di recupero nel caso dovessi perdere la password?
@@ -82,6 +91,7 @@ addvault.new.readme.accessLocation.2=Questa è la posizione d'accesso della tua
addvault.new.readme.accessLocation.3=Ogni file aggiunto a questo volume sarà crittografato da Cryptomator. Puoi lavorarci come su ogni altra unità/cartella. Questa è solo una vista decrittografata del suo contenuto, i tuoi file restano sempre crittografati sul tuo disco rigido. addvault.new.readme.accessLocation.3=Ogni file aggiunto a questo volume sarà crittografato da Cryptomator. Puoi lavorarci come su ogni altra unità/cartella. Questa è solo una vista decrittografata del suo contenuto, i tuoi file restano sempre crittografati sul tuo disco rigido.
addvault.new.readme.accessLocation.4=Sentiti libero di rimuovere questo file. addvault.new.readme.accessLocation.4=Sentiti libero di rimuovere questo file.
## Existing ## Existing
addvaultwizard.existing.title=Aggiungi una Cassaforte Esistente
addvaultwizard.existing.instruction=Scegliere il file "vault.cryptomator" della tua cassaforte. Se esiste solo un file chiamato "masterkey.cryptomator", allora scegli quello. addvaultwizard.existing.instruction=Scegliere il file "vault.cryptomator" della tua cassaforte. Se esiste solo un file chiamato "masterkey.cryptomator", allora scegli quello.
addvaultwizard.existing.chooseBtn=Scegli… addvaultwizard.existing.chooseBtn=Scegli…
addvaultwizard.existing.filePickerTitle=Seleziona file cassaforte addvaultwizard.existing.filePickerTitle=Seleziona file cassaforte
@@ -126,7 +136,11 @@ unlock.success.revealBtn=Rivela l'Unità
unlock.error.customPath.message=Impossibile montare la cassaforte sul percorso personalizzato unlock.error.customPath.message=Impossibile montare la cassaforte sul percorso personalizzato
unlock.error.customPath.description.notSupported=Se desideri continuare a utilizzare il percorso personalizzato, vai alle preferenze e seleziona un tipo di volume che lo supporta. Altrimenti, vai alle opzioni della cassaforte e scegli un punto di montaggio supportato. unlock.error.customPath.description.notSupported=Se desideri continuare a utilizzare il percorso personalizzato, vai alle preferenze e seleziona un tipo di volume che lo supporta. Altrimenti, vai alle opzioni della cassaforte e scegli un punto di montaggio supportato.
unlock.error.customPath.description.notExists=Il percorso di mount personalizzato non esiste. Crealo nel tuo file system locale o cambialo nelle opzioni della cassaforte. unlock.error.customPath.description.notExists=Il percorso di mount personalizzato non esiste. Crealo nel tuo file system locale o cambialo nelle opzioni della cassaforte.
unlock.error.customPath.description.generic=Hai selezionato un percorso di montaggio personalizzato per questa cassaforte, ma il suo utilizzo è fallito col messaggio: %s unlock.error.customPath.description.inUse=La lettera di unità o il percorso di montaggio selezionato "%s" è già in uso.
unlock.error.customPath.description.hideawayNotDir=Impossibile rimuovere il file temporaneo nascosto "%3$s" utilizzato per lo sblocco. Controllare il file e quindi eliminarlo manualmente.
unlock.error.customPath.description.couldNotBeCleaned=La tua cassaforte non può essere montata sul percorso "%s". Riprova o scegli un percorso diverso.
unlock.error.customPath.description.notEmptyDir=Il percorso di montaggio selezionato "%s" non è una cartella vuota. Scegli una cartella vuota e riprova.
unlock.error.customPath.description.generic=Hai selezionato un percorso di montaggio personalizzato per questa cassaforte, ma il suo utilizzo non è riuscito con il messaggio: %2$s
## Hub ## Hub
hub.noKeychain.message=Impossibile accedere alla chiave del dispositivo hub.noKeychain.message=Impossibile accedere alla chiave del dispositivo
hub.noKeychain.description=Per sbloccare le casseforti Hub, è necessaria una chiave del dispositivo, che è protetta tramite un portachiavi. Per procedere, abilita "%s" e seleziona un portachiavi nelle preferenze. hub.noKeychain.description=Per sbloccare le casseforti Hub, è necessaria una chiave del dispositivo, che è protetta tramite un portachiavi. Per procedere, abilita "%s" e seleziona un portachiavi nelle preferenze.
@@ -351,7 +365,9 @@ main.vaultlist.contextMenu.unlock=Sblocca…
main.vaultlist.contextMenu.unlockNow=Sblocca Ora main.vaultlist.contextMenu.unlockNow=Sblocca Ora
main.vaultlist.contextMenu.vaultoptions=Mostra le Opzioni della Cassaforte main.vaultlist.contextMenu.vaultoptions=Mostra le Opzioni della Cassaforte
main.vaultlist.contextMenu.reveal=Rivela Unità main.vaultlist.contextMenu.reveal=Rivela Unità
main.vaultlist.addVaultBtn=Aggiungi Cassaforte main.vaultlist.addVaultBtn=Aggiungi
main.vaultlist.addVaultBtn.menuItemNew=Nuova Cassaforte...
main.vaultlist.addVaultBtn.menuItemExisting=Cassaforte esistente...
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Grazie per aver scelto Cryptomator per proteggere i tuoi file. Se necessiti d'assistenza, dai un'occhiata alle nostre guide per iniziare: main.vaultDetail.welcomeOnboarding=Grazie per aver scelto Cryptomator per proteggere i tuoi file. Se necessiti d'assistenza, dai un'occhiata alle nostre guide per iniziare:
@@ -487,4 +503,12 @@ quit.lockAndQuitBtn=Blocca ed Esci
# Forced Quit # Forced Quit
quit.forced.message=Qualche cassaforte non può essere bloccata quit.forced.message=Qualche cassaforte non può essere bloccata
quit.forced.description=Il blocco delle cassaforte è stato bloccato da operazioni in attesa o da file aperti. È possibile forzare il blocco delle cassaforti rimanenti, tuttavia interrompere le operazioni I/O potrebbe causare la perdita di dati non salvati. quit.forced.description=Il blocco delle cassaforte è stato bloccato da operazioni in attesa o da file aperti. È possibile forzare il blocco delle cassaforti rimanenti, tuttavia interrompere le operazioni I/O potrebbe causare la perdita di dati non salvati.
quit.forced.forceAndQuitBtn=Forza e Esci quit.forced.forceAndQuitBtn=Forza e Esci
# Update Reminder
updateReminder.title=Controllo aggiornamenti
updateReminder.message=Controllo aggiornamenti?
updateReminder.description=Rimani aggiornato per nuove funzionalità, correzioni di bug e miglioramenti di sicurezza. Si consiglia di controllare automaticamente la presenza di aggiornamenti.
updateReminder.notNow=Non adesso
updateReminder.yesOnce=Sì, una volta
updateReminder.yesAutomatically=Sì, automaticamente
+31 -7
View File
@@ -16,10 +16,15 @@ generic.button.print=印刷
# Error # Error
error.message=エラー %s error.message=エラー %s
error.description=Cryptomator で予期できない問題が発生しました! 。このエラーの解決方法を検索することができ、まだ報告されていない場合は、報告を行うことができます。 error.description=Cryptomator で予期ない問題が発生しました。このエラーの解決方法を検索することができ、まだ報告されていない場合は、報告を行うことができます。
error.hyperlink.lookup=このエラーを検索する error.hyperlink.lookup=このエラーを検索する
error.hyperlink.report=このエラーを報告する error.hyperlink.report=このエラーを報告する
error.technicalDetails=詳細: error.technicalDetails=詳細:
error.existingSolutionDescription=Cryptomator が予期しない状況が発生しましたが、解決策が見つかりました。以下のリンクを参照してください。
error.hyperlink.solution=解決策を調べる
error.lookupPermissionMessage=Cryptomatorはこの問題の解決策をオンラインで調べることができます。その際、あなたのIPアドレスから私たちの解決策データベースに問い合わせます。
error.dismiss=閉じる
error.lookUpSolution=解決策を調べる
# Defaults # Defaults
defaults.vault.vaultName=金庫 defaults.vault.vaultName=金庫
@@ -35,9 +40,6 @@ traymenu.vault.reveal=表示
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=金庫を追加 addvaultwizard.title=金庫を追加
## Welcome
addvaultwizard.welcome.newButton=新しい金庫を作成
addvaultwizard.welcome.existingButton=すでにある金庫を開く
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=金庫の名前を入力してください addvaultwizard.new.nameInstruction=金庫の名前を入力してください
@@ -59,6 +61,12 @@ addvaultwizard.new.validCharacters.message=金庫の名前には次の文字が
addvaultwizard.new.validCharacters.chars=単語文字 (例: a、ж、수) addvaultwizard.new.validCharacters.chars=単語文字 (例: a、ж、수)
addvaultwizard.new.validCharacters.numbers=数字 addvaultwizard.new.validCharacters.numbers=数字
addvaultwizard.new.validCharacters.dashes=ハイフン (%s) またはアンダースコア (%s) addvaultwizard.new.validCharacters.dashes=ハイフン (%s) またはアンダースコア (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=上級者向け設定を有効にする
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=36 から 220 までの値を入力してください (既定値は 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=ドキュメントを開いて詳細を見る
addvaultwizard.new.expertSettings.shorteningThreshold.title=暗号化ファイル名の最大長
addvaultwizard.new.expertSettings.shorteningThreshold.valid=有効
### Password ### Password
addvaultwizard.new.createVaultBtn=金庫を作成 addvaultwizard.new.createVaultBtn=金庫を作成
addvaultwizard.new.generateRecoveryKeyChoice=データにアクセスするにはパスワードが必須です。パスワードを紛失したときのためにリカバリーキーは必要ですか? addvaultwizard.new.generateRecoveryKeyChoice=データにアクセスするにはパスワードが必須です。パスワードを紛失したときのためにリカバリーキーは必要ですか?
@@ -126,7 +134,11 @@ unlock.success.revealBtn=ドライブを表示
unlock.error.customPath.message=カスタム パスに金庫をマウントできません unlock.error.customPath.message=カスタム パスに金庫をマウントできません
unlock.error.customPath.description.notSupported=カスタム パスを使い続けたい場合、環境設定に移動してサポートしているボリューム タイプを選択してください。もしくは、金庫のオプションに移動してサポートされるマウント ポイントを選択してください。 unlock.error.customPath.description.notSupported=カスタム パスを使い続けたい場合、環境設定に移動してサポートしているボリューム タイプを選択してください。もしくは、金庫のオプションに移動してサポートされるマウント ポイントを選択してください。
unlock.error.customPath.description.notExists=カスタム マウント パスが存在していません。ローカル ファイルシステムで作成するか、金庫のオプションで変更してください。 unlock.error.customPath.description.notExists=カスタム マウント パスが存在していません。ローカル ファイルシステムで作成するか、金庫のオプションで変更してください。
unlock.error.customPath.description.generic=この金庫のカスタム マウント パスを選択しましたが、次のメッセージで失敗しました: %s unlock.error.customPath.description.inUse=ドライブ名またはカスタムマウントパス「%s」は既に使用されています。
unlock.error.customPath.description.hideawayNotDir=ロック解除に使用される一時的な隠しファイル "%3$s" を削除できませんでした。ファイルを確認し、手動で削除してください。
unlock.error.customPath.description.couldNotBeCleaned=金庫を "%s" にマウントすることができませんでした。もう一度試すか、別のパスを選択してください。
unlock.error.customPath.description.notEmptyDir=カスタムマウントパス「%s」は空のフォルダではありません。空のフォルダを選択して再度お試し下さい。
unlock.error.customPath.description.generic=この金庫に対してカスタムマウントパスを選択しましたが、以下のメッセージとともに失敗しました:%2$s
## Hub ## Hub
hub.noKeychain.message=デバイス キーにアクセスできません hub.noKeychain.message=デバイス キーにアクセスできません
hub.noKeychain.description=ハブ金庫を解錠するには、キーチェーンが保護するデバイス キーが必要です。続行するには、"%s" を有効にし環境設定からキーチェーンを選択します。 hub.noKeychain.description=ハブ金庫を解錠するには、キーチェーンが保護するデバイス キーが必要です。続行するには、"%s" を有効にし環境設定からキーチェーンを選択します。
@@ -351,7 +363,7 @@ main.vaultlist.contextMenu.unlock=解錠...
main.vaultlist.contextMenu.unlockNow=今すぐ解錠 main.vaultlist.contextMenu.unlockNow=今すぐ解錠
main.vaultlist.contextMenu.vaultoptions=金庫のオプションを表示 main.vaultlist.contextMenu.vaultoptions=金庫のオプションを表示
main.vaultlist.contextMenu.reveal=ドライブを表示 main.vaultlist.contextMenu.reveal=ドライブを表示
main.vaultlist.addVaultBtn=金庫を追加 main.vaultlist.addVaultBtn=追加
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=ファイルを保護するために Cryptomator を選んでいただきありがとうございます。ヘルプが必要であれば、スタートガイドをご覧ください: main.vaultDetail.welcomeOnboarding=ファイルを保護するために Cryptomator を選んでいただきありがとうございます。ヘルプが必要であれば、スタートガイドをご覧ください:
@@ -435,6 +447,8 @@ vaultOptions.masterkey.showRecoveryKeyBtn=回復キーを表示
vaultOptions.masterkey.recoverPasswordBtn=パスワードをリセット vaultOptions.masterkey.recoverPasswordBtn=パスワードをリセット
## Hub ## Hub
vaultOptions.hub=回復 vaultOptions.hub=回復
vaultOptions.hub.convertInfo=緊急時にはリカバリキーを利用して Hub 金庫からパスワードで解錠できる金庫に変換できます。
vaultOptions.hub.convertBtn=パスワードに基づいた金庫に変換
# Recovery Key # Recovery Key
## Display Recovery Key ## Display Recovery Key
@@ -446,6 +460,7 @@ recoveryKey.display.StorageHints=十分に安全な場所に保存してくだ
## Reset Password ## Reset Password
### Enter Recovery Key ### Enter Recovery Key
recoveryKey.recover.title=パスワードをリセット recoveryKey.recover.title=パスワードをリセット
recoveryKey.recover.prompt="%s" のリカバリーキーを入力してください:
recoveryKey.recover.correctKey=有効な回復キー recoveryKey.recover.correctKey=有効な回復キー
recoveryKey.recover.wrongKey=この回復キーは別の金庫に属しています recoveryKey.recover.wrongKey=この回復キーは別の金庫に属しています
recoveryKey.recover.invalidKey=この回復キーは有効ではありません recoveryKey.recover.invalidKey=この回復キーは有効ではありません
@@ -461,6 +476,7 @@ convertVault.title=金庫を変換
convertVault.convert.convertBtn.before=変換 convertVault.convert.convertBtn.before=変換
convertVault.convert.convertBtn.processing=変換中… convertVault.convert.convertBtn.processing=変換中…
convertVault.success.message=変換完了 convertVault.success.message=変換完了
convertVault.hubToPassword.success.description=Hub へアクセスせずに選択したパスワードで金庫を解錠できるようになりました。
# New Password # New Password
newPassword.promptText=新しいパスワードを入力してください newPassword.promptText=新しいパスワードを入力してください
@@ -483,4 +499,12 @@ quit.lockAndQuitBtn=施錠して終了
# Forced Quit # Forced Quit
quit.forced.message=一部の金庫を施錠できませんでした quit.forced.message=一部の金庫を施錠できませんでした
quit.forced.description=保留中の操作か、開かれたファイルによって、金庫の施錠が中断されました。残りの金庫を強制的に施錠することはできますが、I/O を中断すると保存されていないデータを失う可能性があります。 quit.forced.description=保留中の操作か、開かれたファイルによって、金庫の施錠が中断されました。残りの金庫を強制的に施錠することはできますが、I/O を中断すると保存されていないデータを失う可能性があります。
quit.forced.forceAndQuitBtn=強制的に終了 quit.forced.forceAndQuitBtn=強制的に終了
# Update Reminder
updateReminder.title=更新の確認
updateReminder.message=更新を確認するか
updateReminder.description=自動的に更新をチェックして、新機能、バグ修正、セキュリティの改善などを入手するのをお勧めします。
updateReminder.notNow=また後で
updateReminder.yesOnce=はい、一度だけ
updateReminder.yesAutomatically=自動的に行う
+24 -5
View File
@@ -35,9 +35,6 @@ traymenu.vault.reveal=표시
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Vault 추가 addvaultwizard.title=Vault 추가
## Welcome
addvaultwizard.welcome.newButton=새 Vault 생성
addvaultwizard.welcome.existingButton=기존 Vault 열기
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=새 Vault의 이름을 입력하십시요 addvaultwizard.new.nameInstruction=새 Vault의 이름을 입력하십시요
@@ -59,6 +56,7 @@ addvaultwizard.new.validCharacters.message=Vault 이름에는 다음과 같은
addvaultwizard.new.validCharacters.chars=문자 (예시: a, ж or 수) addvaultwizard.new.validCharacters.chars=문자 (예시: a, ж or 수)
addvaultwizard.new.validCharacters.numbers=숫자 addvaultwizard.new.validCharacters.numbers=숫자
addvaultwizard.new.validCharacters.dashes=대시 (%s) 또는 언더바 (%s) addvaultwizard.new.validCharacters.dashes=대시 (%s) 또는 언더바 (%s)
### Expert Settings
### Password ### Password
addvaultwizard.new.createVaultBtn=Vault 생성 addvaultwizard.new.createVaultBtn=Vault 생성
addvaultwizard.new.generateRecoveryKeyChoice=비밀번호가 없으면 데이터에 접근할 수 없습니다. 비밀번호를 잊었을 때를 대비한 복구 키를 원하십니까? addvaultwizard.new.generateRecoveryKeyChoice=비밀번호가 없으면 데이터에 접근할 수 없습니다. 비밀번호를 잊었을 때를 대비한 복구 키를 원하십니까?
@@ -133,10 +131,15 @@ hub.register.registerBtn=확인
### Registration Success ### Registration Success
### Registration Failed ### Registration Failed
### Unauthorized ### Unauthorized
hub.unauthorized.message=액세스 거부
hub.unauthorized.description=귀하의 기기는 아직 이 저장소에 액세스할 수 있는 권한이 없습니다. Vault 소유자에게 승인을 요청하세요.
### License Exceeded ### License Exceeded
hub.invalidLicense.message=Hub 라이선스가 잘못되었습니다.
hub.invalidLicense.description=Cryptomator Hub 인스턴스에 잘못된 라이선스가 있습니다. 라이센스를 업그레이드하거나 갱신하려면 허브 관리자에게 알리십시오.
# Lock # Lock
## Force ## Force
lock.forced.message=잠금 실패
lock.forced.description=대기 중인 작동이나 파일이 열려있어 "%s"를 잠그는데 실패하였습니다. 이 Vault를 강제로 잠글 수 있으나, 입/출력의 중단은 저장되지 않은 데이터의 유실을 초래할 수 있습니다. lock.forced.description=대기 중인 작동이나 파일이 열려있어 "%s"를 잠그는데 실패하였습니다. 이 Vault를 강제로 잠글 수 있으나, 입/출력의 중단은 저장되지 않은 데이터의 유실을 초래할 수 있습니다.
lock.forced.retryBtn=재시도 lock.forced.retryBtn=재시도
lock.forced.forceBtn=강제 잠금 lock.forced.forceBtn=강제 잠금
@@ -177,6 +180,7 @@ migration.impossible.moreInfo=Vault를 이전 버전으로 계속 열수 있습
health.title="%s"의 상태 검사 health.title="%s"의 상태 검사
health.intro.header=상태 검사 health.intro.header=상태 검사
health.intro.text=상태 검사는 Vault의 내부 구조의 문제점을 점검하고 해결할 수 있는 기능입니다. 다음 사항을 유의하시기 바랍니다: health.intro.text=상태 검사는 Vault의 내부 구조의 문제점을 점검하고 해결할 수 있는 기능입니다. 다음 사항을 유의하시기 바랍니다:
health.intro.remarkFix=모든 문제를 해결할 수 있는 것은 아닙니다.
health.intro.remarkBackup=데이터가 손상된 경우 백업만이 유일한 해결책입니다. health.intro.remarkBackup=데이터가 손상된 경우 백업만이 유일한 해결책입니다.
health.intro.affirmation=나는 위 정보를 읽고 정말 이해했습니다. health.intro.affirmation=나는 위 정보를 읽고 정말 이해했습니다.
## Start Failure ## Start Failure
@@ -185,6 +189,7 @@ health.fail.ioError=설정 파일에 접근하는 중 에러가 발생했습니
health.fail.parseError=Vault 설정을 파싱하는 중 에러가 발생했습니다. health.fail.parseError=Vault 설정을 파싱하는 중 에러가 발생했습니다.
health.fail.moreInfo=더 많은 정보 health.fail.moreInfo=더 많은 정보
## Check Selection ## Check Selection
health.checkList.description=검사할 항목을 왼쪽 목록에서 선택하거나 아래 버튼을 사용하세요.
health.checkList.selectAllButton=모든 항목 선택 health.checkList.selectAllButton=모든 항목 선택
health.checkList.deselectAllButton=모든 항목 선택 해제 health.checkList.deselectAllButton=모든 항목 선택 해제
health.check.runBatchBtn=선택된 검사항목 실행 health.check.runBatchBtn=선택된 검사항목 실행
@@ -194,6 +199,8 @@ health.check.detail.checkScheduled=검사가 예약되었습니다.
health.check.detail.checkRunning=검사가 현재 실행중입니다... health.check.detail.checkRunning=검사가 현재 실행중입니다...
health.check.detail.checkSkipped=선택된 검사항목이 없습니다. health.check.detail.checkSkipped=선택된 검사항목이 없습니다.
health.check.detail.checkFinished=검사가 성공적으로 완료되었습니다. health.check.detail.checkFinished=검사가 성공적으로 완료되었습니다.
health.check.detail.checkFinishedAndFound=검사가 완료되었습니다. 검사 결과를 확인해주세요.
health.check.detail.checkCancelled=검사가 취소되었습니다
health.check.detail.listFilters.label=필터 health.check.detail.listFilters.label=필터
health.check.exportBtn=보고서 내보내기 health.check.exportBtn=보고서 내보내기
## Result view ## Result view
@@ -227,9 +234,12 @@ preferences.interface.showMinimizeButton=최소화 버튼 표시
preferences.interface.showTrayIcon=트레이 아이콘 보기 (재시작 필요) preferences.interface.showTrayIcon=트레이 아이콘 보기 (재시작 필요)
## Volume ## Volume
preferences.volume=가상 드라이브 preferences.volume=가상 드라이브
preferences.volume.type=볼륨 유형
preferences.volume.type.automatic=자동 preferences.volume.type.automatic=자동
preferences.volume.tcp.port=TCP 포트 preferences.volume.tcp.port=TCP 포트
preferences.volume.supportedFeatures=현재 선택한 볼륨 타입은 다음과 같은 기능들을 지원합니다: preferences.volume.supportedFeatures=현재 선택한 볼륨 타입은 다음과 같은 기능들을 지원합니다:
preferences.volume.feature.mountFlags=사용자 정의 마운트 설정
preferences.volume.feature.readOnly=읽기 전용 마운트
## Updates ## Updates
preferences.updates=업데이트 preferences.updates=업데이트
preferences.updates.currentVersion=현재 버전: %s preferences.updates.currentVersion=현재 버전: %s
@@ -264,9 +274,11 @@ stats.read.accessCount=총 읽기 횟수: %d
stats.write.throughput.idle=쓰기: 대기중 stats.write.throughput.idle=쓰기: 대기중
stats.write.throughput.mibs=쓰기: %.2f MiB/s stats.write.throughput.mibs=쓰기: %.2f MiB/s
stats.write.total.data.none=데이터 기록됨: - stats.write.total.data.none=데이터 기록됨: -
stats.write.total.data.kib=데이터 쓰기: %.1f KiB
stats.write.total.data.mib=데이터 쓰기: %.1f MiB stats.write.total.data.mib=데이터 쓰기: %.1f MiB
stats.write.total.data.gib=데이터 쓰기: %.1f GiB stats.write.total.data.gib=데이터 쓰기: %.1f GiB
stats.encr.total.data.none=데이터 암호화: - stats.encr.total.data.none=데이터 암호화: -
stats.encr.total.data.kib=데이터 암호화: %.1f KiB
stats.encr.total.data.mib=데이터 암호화: %.1f MiB stats.encr.total.data.mib=데이터 암호화: %.1f MiB
stats.encr.total.data.gib=데이터 암호화: %.1f GiB stats.encr.total.data.gib=데이터 암호화: %.1f GiB
stats.write.accessCount=총 쓰기 횟수: %d stats.write.accessCount=총 쓰기 횟수: %d
@@ -288,7 +300,7 @@ main.vaultlist.contextMenu.unlock=잠금해제...
main.vaultlist.contextMenu.unlockNow=지금 잠금해제 main.vaultlist.contextMenu.unlockNow=지금 잠금해제
main.vaultlist.contextMenu.vaultoptions=Vault 옵션 보기 main.vaultlist.contextMenu.vaultoptions=Vault 옵션 보기
main.vaultlist.contextMenu.reveal=드라이브 표시 main.vaultlist.contextMenu.reveal=드라이브 표시
main.vaultlist.addVaultBtn=Vault 추가 main.vaultlist.addVaultBtn=추가
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=파일을 보호하기 위해 Cryptomator를 선택해주셔서 감사합니다. 만약 다른 도움이 필요하시면, 시작안내서를 참조하시기 바랍니다. main.vaultDetail.welcomeOnboarding=파일을 보호하기 위해 Cryptomator를 선택해주셔서 감사합니다. 만약 다른 도움이 필요하시면, 시작안내서를 참조하시기 바랍니다.
@@ -302,10 +314,12 @@ main.vaultDetail.passwordSavedInKeychain=비밀번호 저장됨
main.vaultDetail.unlockedStatus=잠금해제됨 main.vaultDetail.unlockedStatus=잠금해제됨
main.vaultDetail.accessLocation=이 Vault의 내용은 다음의 경로에서 접근할 수 있습니다: main.vaultDetail.accessLocation=이 Vault의 내용은 다음의 경로에서 접근할 수 있습니다:
main.vaultDetail.revealBtn=드라이브 표시 main.vaultDetail.revealBtn=드라이브 표시
main.vaultDetail.copyUri=URI 복사
main.vaultDetail.lockBtn=잠금 main.vaultDetail.lockBtn=잠금
main.vaultDetail.bytesPerSecondRead=읽기: main.vaultDetail.bytesPerSecondRead=읽기:
main.vaultDetail.bytesPerSecondWritten=쓰기: main.vaultDetail.bytesPerSecondWritten=쓰기:
main.vaultDetail.throughput.idle=대기 main.vaultDetail.throughput.idle=대기
main.vaultDetail.throughput.kbps=%.1f KiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=Vault 통계 main.vaultDetail.stats=Vault 통계
### Missing ### Missing
@@ -362,6 +376,7 @@ vaultOptions.masterkey.recoveryKeyExplanation=복구 키는 비밀번호를 잊
vaultOptions.masterkey.showRecoveryKeyBtn=복구 키 표시 vaultOptions.masterkey.showRecoveryKeyBtn=복구 키 표시
vaultOptions.masterkey.recoverPasswordBtn=비밀번호 재설정 vaultOptions.masterkey.recoverPasswordBtn=비밀번호 재설정
## Hub ## Hub
vaultOptions.hub=복구
# Recovery Key # Recovery Key
## Display Recovery Key ## Display Recovery Key
@@ -373,6 +388,7 @@ recoveryKey.display.StorageHints=매우 안전한곳에 보관하십시요. 예
## Reset Password ## Reset Password
### Enter Recovery Key ### Enter Recovery Key
recoveryKey.recover.title=비밀번호 바꾸기 recoveryKey.recover.title=비밀번호 바꾸기
recoveryKey.recover.prompt="%s"의 복구키를 입력하십시요:
recoveryKey.recover.correctKey=올바른 복구 키 입니다 recoveryKey.recover.correctKey=올바른 복구 키 입니다
recoveryKey.recover.wrongKey=이 복구 키는 다른 vault의 키입니다 recoveryKey.recover.wrongKey=이 복구 키는 다른 vault의 키입니다
recoveryKey.recover.invalidKey=해당 복구 키는 유효하지 않습니다 recoveryKey.recover.invalidKey=해당 복구 키는 유효하지 않습니다
@@ -402,4 +418,7 @@ quit.title=앱 종료
quit.message=잠금 해제된 vault들이 존재합니다 quit.message=잠금 해제된 vault들이 존재합니다
quit.lockAndQuitBtn=Vault 잠금 후 종료하기 quit.lockAndQuitBtn=Vault 잠금 후 종료하기
# Forced Quit # Forced Quit
quit.forced.forceAndQuitBtn=Vault 강제 잠금 후 종료하기
# Update Reminder
@@ -35,9 +35,6 @@ traymenu.vault.reveal=Atklāt
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Pievienot glabātuvi addvaultwizard.title=Pievienot glabātuvi
## Welcome
addvaultwizard.welcome.newButton=Izveidot jaunu glabātuvi
addvaultwizard.welcome.existingButton=Atvērt esošu glabātuvi
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Izvēlies glabātuves nosaukumu addvaultwizard.new.nameInstruction=Izvēlies glabātuves nosaukumu
@@ -55,6 +52,7 @@ addvaultwizard.new.validCharacters.message=Krātuves nosaukums var saturēt šā
addvaultwizard.new.validCharacters.chars=Burtus (piemēram: a, ж vai 수) addvaultwizard.new.validCharacters.chars=Burtus (piemēram: a, ж vai 수)
addvaultwizard.new.validCharacters.numbers=Skaitļus addvaultwizard.new.validCharacters.numbers=Skaitļus
addvaultwizard.new.validCharacters.dashes=Defise (%s) vai pasvītra (%s) addvaultwizard.new.validCharacters.dashes=Defise (%s) vai pasvītra (%s)
### Expert Settings
### Password ### Password
addvaultwizard.new.createVaultBtn=Izveidot glabātuvi 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=Jūs nevarēsiet piekļūt saviem datiem bez paroles. Vai vēlaties atkopšanas atslēgu gadījumam, kad esat pazaudējis paroli?
@@ -189,7 +187,6 @@ main.vaultlist.emptyList.onboardingInstruction=Spied šeit, lai pievienotu glab
main.vaultlist.contextMenu.lock=Aizslēgt main.vaultlist.contextMenu.lock=Aizslēgt
main.vaultlist.contextMenu.unlockNow=Atslēgt tagad main.vaultlist.contextMenu.unlockNow=Atslēgt tagad
main.vaultlist.contextMenu.reveal=Atklāt disku main.vaultlist.contextMenu.reveal=Atklāt disku
main.vaultlist.addVaultBtn=Pievienot glabātuvi
## Vault Detail ## Vault Detail
### Welcome ### Welcome
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: 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:
@@ -275,4 +272,6 @@ passwordStrength.messageLabel.4=Ļoti stipra
# Quit # Quit
quit.lockAndQuitBtn=Aizslēgt un aizvērt quit.lockAndQuitBtn=Aizslēgt un aizvērt
# Forced Quit # Forced Quit
# Update Reminder
+51 -2
View File
@@ -2,21 +2,60 @@
# Generics # Generics
## Button ## Button
generic.button.apply=Примени
generic.button.back=Назад
generic.button.cancel=Откажи
generic.button.change=Промени
generic.button.choose=Избор…
generic.button.close=Затвори
generic.button.copy=Копирај
generic.button.copied=Копирано!
generic.button.done=Прифати
generic.button.next=Продолжи
generic.button.print=Печати
# Error # Error
error.message=Грешка
error.description=Не очекуваше да се случи ова. Можете да пронајдете постоечки решенија за оваа грешка. Или, ако не е пријавена сè уште, слободно направете тоа.
error.hyperlink.lookup=Пребарај за оваа грешка
error.hyperlink.report=Пријави ја оваа грешка
error.technicalDetails=Детали:
error.existingSolutionDescription=Не очекуваше да се случи ова. Но најдовме постоечко решение за оваа грешка. Ве молиме погледнете го следниот линк.
error.hyperlink.solution=Пребарај решение
# Defaults # Defaults
defaults.vault.vaultName=Сеф
# Tray Menu # Tray Menu
traymenu.showMainWindow=Покажи
traymenu.showPreferencesWindow=Поставки
traymenu.lockAllVaults=Заклучи сè
traymenu.quitApplication=Излез
traymenu.vault.unlock=Отклучи
traymenu.vault.lock=Заклучи
traymenu.vault.reveal=Откриј
# Add Vault Wizard # Add Vault Wizard
## Welcome addvaultwizard.title=Додај сеф
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Одберете име за сефот
addvaultwizard.new.namePrompt=Име на сеф
### Location ### Location
addvaultwizard.new.locationInstruction=Каде би сакале Cryptomator да ги зачува шифрираните фајлови на Вашиот сеф?
addvaultwizard.new.locationLabel=Локација за складирање
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Прилагодена локација
addvaultwizard.new.directoryPickerButton=Избор…
addvaultwizard.new.directoryPickerTitle=Избери папка
addvaultwizard.new.fileAlreadyExists=Датотека или папка со истото име на сефот веќе постои
addvaultwizard.new.locationDoesNotExist=Папка на наведената локација не постои или е непристапна
addvaultwizard.new.locationIsNotWritable=Нема пристап за запишување на наведената локација
### Expert Settings
### Password ### Password
### Information ### Information
## Existing ## Existing
addvaultwizard.existing.chooseBtn=Избор…
## Success ## Success
# Remove Vault # Remove Vault
@@ -26,6 +65,7 @@
# Forget Password # Forget Password
# Unlock # Unlock
unlock.unlockBtn=Отклучи
## Select ## Select
## Success ## Success
## Failure ## Failure
@@ -59,6 +99,7 @@ hub.register.registerBtn=Потврди
## Fix Application ## Fix Application
# Preferences # Preferences
preferences.title=Поставки
## General ## General
## Interface ## Interface
## Volume ## Volume
@@ -76,11 +117,15 @@ hub.register.registerBtn=Потврди
# Main Window # Main Window
main.closeBtn.tooltip=Затвори
main.preferencesBtn.tooltip=Поставки
## Vault List ## Vault List
main.vaultlist.contextMenu.lock=Заклучи
## Vault Detail ## Vault Detail
### Welcome ### Welcome
### Locked ### Locked
### Unlocked ### Unlocked
main.vaultDetail.lockBtn=Заклучи
### Missing ### Missing
### Needs Migration ### Needs Migration
### Error ### Error
@@ -89,8 +134,10 @@ hub.register.registerBtn=Потврди
# Vault Options # Vault Options
## General ## General
vaultOptions.general.vaultName=Име на сеф
## Mount ## Mount
vaultOptions.mount.mountPoint.directoryPickerButton=Избор…
## Master Key ## Master Key
## Hub ## Hub
@@ -107,4 +154,6 @@ hub.register.registerBtn=Потврди
# Quit # Quit
# Forced Quit # Forced Quit
# Update Reminder
+43 -12
View File
@@ -20,6 +20,11 @@ error.description=Oops! Cryptomator forventet ikke at dette skulle skje. Du kan
error.hyperlink.lookup=Slå opp denne feilen error.hyperlink.lookup=Slå opp denne feilen
error.hyperlink.report=Rapporter denne feilen error.hyperlink.report=Rapporter denne feilen
error.technicalDetails=Detaljer: error.technicalDetails=Detaljer:
error.existingSolutionDescription=Cryptomator forventet ikke at dette skulle skje. Men vi fant en eksisterende løsning for denne feilen. Ta en titt ved å følge lenken.
error.hyperlink.solution=Slå opp løsningen
error.lookupPermissionMessage=Cryptomator kan finne en løsning for problemet på nettet. Dette vil sende en forespørsel til problemdatabasen vår fra IP-adressen din.
error.dismiss=Avvis
error.lookUpSolution=Finn løsning
# Defaults # Defaults
defaults.vault.vaultName=Hvelv defaults.vault.vaultName=Hvelv
@@ -35,9 +40,6 @@ traymenu.vault.reveal=Gjør synlig
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Legg til hvelv addvaultwizard.title=Legg til hvelv
## Welcome
addvaultwizard.welcome.newButton=Opprett et nytt hvelv
addvaultwizard.welcome.existingButton=Åpne et eksisterende hvelv
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Navngi hvelvet addvaultwizard.new.nameInstruction=Navngi hvelvet
@@ -59,6 +61,12 @@ addvaultwizard.new.validCharacters.message=Hvelvnavnet kan inneholde følgende t
addvaultwizard.new.validCharacters.chars=Ordtegn (eks. a, ж or 수) addvaultwizard.new.validCharacters.chars=Ordtegn (eks. a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Tall addvaultwizard.new.validCharacters.numbers=Tall
addvaultwizard.new.validCharacters.dashes=Bindestrek (%s) eller understrek (%s) addvaultwizard.new.validCharacters.dashes=Bindestrek (%s) eller understrek (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Aktiver ekspertinnstillinger
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Angi en verdi mellom 36 og 220 (standard 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Åpne dokumentasjonen for å lære mer.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maksimal lengde på krypterte filnavn
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Gyldig
### Password ### Password
addvaultwizard.new.createVaultBtn=Opprett hvelv addvaultwizard.new.createVaultBtn=Opprett hvelv
addvaultwizard.new.generateRecoveryKeyChoice=Du vil ikke kunne få tilgang til dataene dine uten passordet. Vil du ha en gjenopprettingsnøkkel i tilefelle du mister passordet ditt? addvaultwizard.new.generateRecoveryKeyChoice=Du vil ikke kunne få tilgang til dataene dine uten passordet. Vil du ha en gjenopprettingsnøkkel i tilefelle du mister passordet ditt?
@@ -121,12 +129,16 @@ unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator Hovednøkkel
unlock.success.message=Opplåsing vellykket unlock.success.message=Opplåsing vellykket
unlock.success.description=Vellykket opplåsing av "%s"! Hvelvet ditt er nå tilgjengelig via sin virtuelle stasjon. unlock.success.description=Vellykket opplåsing av "%s"! Hvelvet ditt er nå tilgjengelig via sin virtuelle stasjon.
unlock.success.rememberChoice=Husk valget - ikke vis dette igjen unlock.success.rememberChoice=Husk valget - ikke vis dette igjen
unlock.success.revealBtn=Gjør enheten synlig unlock.success.revealBtn=Vis enheten
## Failure ## Failure
unlock.error.customPath.message=Kan ikke montere hvelvet til egendefinert sti unlock.error.customPath.message=Kan ikke montere hvelvet til egendefinert sti
unlock.error.customPath.description.notSupported=Hvis du vil fortsette å bruke den egendefinerte stien, gå til innstillingene og velg en enhetstype som støtter den. Gå ellers til hvelvalternativene og velg et støttet monteringspunkt. unlock.error.customPath.description.notSupported=Hvis du vil fortsette å bruke den egendefinerte stien, gå til innstillingene og velg en enhetstype som støtter den. Gå ellers til hvelvalternativene og velg et støttet monteringspunkt.
unlock.error.customPath.description.notExists=Egendefinert monteringssti eksisterer ikke. Enten opprett den i ditt lokale filsystem eller endre den i hvelvvalgene. unlock.error.customPath.description.notExists=Egendefinert monteringssti eksisterer ikke. Enten opprett den i ditt lokale filsystem eller endre den i hvelvvalgene.
unlock.error.customPath.description.generic=Du har valgt en egendefinert monterings sti for dette hvelvet, men ved bruk av den mislyktes med meldingen: %s unlock.error.customPath.description.inUse=Stasjonsbokstaven eller egendefinert monteringsbane%s" er allerede i bruk.
unlock.error.customPath.description.hideawayNotDir=Den midlertidige, skjulte filen "%3$ssom brukes til å låse opp kunne ikke fjernes. Kontroller filen og slett den manuelt.
unlock.error.customPath.description.couldNotBeCleaned=Hvelvet ditt kan ikke monteres i banen "%s". Prøv igjen eller velg en annen sti.
unlock.error.customPath.description.notEmptyDir=Tilpasset monterings sti "%s" er ikke en tom mappe. Velg en tom mappe og prøv igjen.
unlock.error.customPath.description.generic=Du har valgt en egendefinert monterings sti for dette hvelvet, men bruk av den mislyktes med meldingen: %2$s
## Hub ## Hub
hub.noKeychain.message=Får ikke tilgang til enhetsnøkkel hub.noKeychain.message=Får ikke tilgang til enhetsnøkkel
hub.noKeychain.description=For å låse opp Hub-hvelv er det nødvendig med en enhetsnøkkel som er sikret med en nøkkelring. For å fortsette, aktiver "%s" og velg en nøkkelring i innstillingene. hub.noKeychain.description=For å låse opp Hub-hvelv er det nødvendig med en enhetsnøkkel som er sikret med en nøkkelring. For å fortsette, aktiver "%s" og velg en nøkkelring i innstillingene.
@@ -274,8 +286,10 @@ preferences.interface.showMinimizeButton=Vis minimer-knapp
preferences.interface.showTrayIcon=Vis verktøykasseikon (krever omstart) preferences.interface.showTrayIcon=Vis verktøykasseikon (krever omstart)
## Volume ## Volume
preferences.volume=Virtuell enhet preferences.volume=Virtuell enhet
preferences.volume.type=Volumtype
preferences.volume.type.automatic=Automatisk preferences.volume.type.automatic=Automatisk
preferences.volume.docsTooltip=Åpne dokumentasjonen for å lære mer om de forskjellige volumtypene. preferences.volume.docsTooltip=Åpne dokumentasjonen for å lære mer om de forskjellige volumtypene.
preferences.volume.fuseRestartRequired=For å iverksette endringene, må Cryptomator startes på nytt.
preferences.volume.tcp.port=TCP Port preferences.volume.tcp.port=TCP Port
preferences.volume.supportedFeatures=Valgt volumtype støtter følgende funksjoner: preferences.volume.supportedFeatures=Valgt volumtype støtter følgende funksjoner:
preferences.volume.feature.mountAuto=Valg av automatisk monteringspunkt preferences.volume.feature.mountAuto=Valg av automatisk monteringspunkt
@@ -348,8 +362,8 @@ main.vaultlist.contextMenu.lock=Lås
main.vaultlist.contextMenu.unlock=Lås opp… main.vaultlist.contextMenu.unlock=Lås opp…
main.vaultlist.contextMenu.unlockNow=Lås opp nå main.vaultlist.contextMenu.unlockNow=Lås opp nå
main.vaultlist.contextMenu.vaultoptions=Alternativer for hvelvet main.vaultlist.contextMenu.vaultoptions=Alternativer for hvelvet
main.vaultlist.contextMenu.reveal=Gjør enheten synlig main.vaultlist.contextMenu.reveal=Vis enheten
main.vaultlist.addVaultBtn=Legg til hvelv main.vaultlist.addVaultBtn=Legg til
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Takk for at du valgte Cryptomator for å beskytte filene dine. Hvis du trenger hjelp, sjekk ut våre guider for å komme i gang: main.vaultDetail.welcomeOnboarding=Takk for at du valgte Cryptomator for å beskytte filene dine. Hvis du trenger hjelp, sjekk ut våre guider for å komme i gang:
@@ -362,7 +376,7 @@ main.vaultDetail.passwordSavedInKeychain=Passordet er lagret
### Unlocked ### Unlocked
main.vaultDetail.unlockedStatus=ULÅST main.vaultDetail.unlockedStatus=ULÅST
main.vaultDetail.accessLocation=Innholdet i hvelvet ditt er tilgjengelig her: main.vaultDetail.accessLocation=Innholdet i hvelvet ditt er tilgjengelig her:
main.vaultDetail.revealBtn=Gjør enheten synlig main.vaultDetail.revealBtn=Vis enheten
main.vaultDetail.copyUri=Kopier URI main.vaultDetail.copyUri=Kopier URI
main.vaultDetail.lockBtn=Lås main.vaultDetail.lockBtn=Lås
main.vaultDetail.bytesPerSecondRead=Lesehastighet: main.vaultDetail.bytesPerSecondRead=Lesehastighet:
@@ -407,20 +421,20 @@ vaultOptions.general.autoLock.lockAfterTimePart2=minutter
vaultOptions.general.unlockAfterStartup=Lås opp hvelvet når du starter Cryptomator vaultOptions.general.unlockAfterStartup=Lås opp hvelvet når du starter Cryptomator
vaultOptions.general.actionAfterUnlock=Etter vellykket opplåsing vaultOptions.general.actionAfterUnlock=Etter vellykket opplåsing
vaultOptions.general.actionAfterUnlock.ignore=Ikke gjør noe vaultOptions.general.actionAfterUnlock.ignore=Ikke gjør noe
vaultOptions.general.actionAfterUnlock.reveal=Gjør enheten synlig vaultOptions.general.actionAfterUnlock.reveal=Vis enheten
vaultOptions.general.actionAfterUnlock.ask=Spør vaultOptions.general.actionAfterUnlock.ask=Spør
vaultOptions.general.startHealthCheckBtn=Start helsesjekk vaultOptions.general.startHealthCheckBtn=Start helsesjekk
## Mount ## Mount
vaultOptions.mount=Montering vaultOptions.mount=Montering
vaultOptions.mount.info=Alternativer avhenger av den valgte volumtypen. vaultOptions.mount.info=Alternativer avhenger av den valgte volumtypen.
vaultOptions.mount.linkToPreferences=Åpne virtuelle driv-innstillinger vaultOptions.mount.linkToPreferences=Åpne virtuelle drev-innstillinger
vaultOptions.mount.readonly=Skrivebeskyttet vaultOptions.mount.readonly=Skrivebeskyttet
vaultOptions.mount.customMountFlags=Tilpassede moteringsparametre vaultOptions.mount.customMountFlags=Tilpassede moteringsparametre
vaultOptions.mount.winDriveLetterOccupied=opptatt vaultOptions.mount.winDriveLetterOccupied=opptatt
vaultOptions.mount.mountPoint=Monteringspunkt vaultOptions.mount.mountPoint=Monteringspunkt
vaultOptions.mount.mountPoint.auto=Velg et passende sted automatisk vaultOptions.mount.mountPoint.auto=Velg et passende sted automatisk
vaultOptions.mount.mountPoint.driveLetter=Bruk tildelt enhetsbokstav vaultOptions.mount.mountPoint.driveLetter=Bruk tildelt drevbokstav
vaultOptions.mount.mountPoint.custom=Bruk valgt mappe vaultOptions.mount.mountPoint.custom=Bruk valgt mappe
vaultOptions.mount.mountPoint.directoryPickerButton=Velg… vaultOptions.mount.mountPoint.directoryPickerButton=Velg…
vaultOptions.mount.mountPoint.directoryPickerTitle=Velg en mappe vaultOptions.mount.mountPoint.directoryPickerTitle=Velg en mappe
@@ -432,6 +446,9 @@ vaultOptions.masterkey.recoveryKeyExplanation=En gjenopprettingsnøkkel er den e
vaultOptions.masterkey.showRecoveryKeyBtn=Vis gjenopprettingsnøkkelen vaultOptions.masterkey.showRecoveryKeyBtn=Vis gjenopprettingsnøkkelen
vaultOptions.masterkey.recoverPasswordBtn=Nullstill passord vaultOptions.masterkey.recoverPasswordBtn=Nullstill passord
## Hub ## Hub
vaultOptions.hub=Gjenoppretting
vaultOptions.hub.convertInfo=Du kan bruke gjenopprettingsnøkkelen for å konvertere dette Hub-hvelvet til et passordbasert hvelv i en nødsituasjon.
vaultOptions.hub.convertBtn=Konverter til passordbasert hvelv
# Recovery Key # Recovery Key
## Display Recovery Key ## Display Recovery Key
@@ -443,6 +460,7 @@ recoveryKey.display.StorageHints=Oppbevar den et veldig sikkert sted, f.eks. ved
## Reset Password ## Reset Password
### Enter Recovery Key ### Enter Recovery Key
recoveryKey.recover.title=Nullstill passordet recoveryKey.recover.title=Nullstill passordet
recoveryKey.recover.prompt=Angi gjenopprettingsnøkkelen for "%s":
recoveryKey.recover.correctKey=Gjenopprettingsnøkkelen er gyldig recoveryKey.recover.correctKey=Gjenopprettingsnøkkelen er gyldig
recoveryKey.recover.wrongKey=Gjenopprettingsnøkkelen tilhører et annet hvelv recoveryKey.recover.wrongKey=Gjenopprettingsnøkkelen tilhører et annet hvelv
recoveryKey.recover.invalidKey=Gjennopprettingsnøkkelen er ugyldig recoveryKey.recover.invalidKey=Gjennopprettingsnøkkelen er ugyldig
@@ -454,6 +472,11 @@ recoveryKey.recover.resetSuccess.message=Passordnullstillingen vellykket
recoveryKey.recover.resetSuccess.description=Du kan låse opp hvelvet med det nye passordet. recoveryKey.recover.resetSuccess.description=Du kan låse opp hvelvet med det nye passordet.
# Convert Vault # Convert Vault
convertVault.title=Konverter hvelvet
convertVault.convert.convertBtn.before=Konverter
convertVault.convert.convertBtn.processing=Konverterer…
convertVault.success.message=Konverteringen var vellykket
convertVault.hubToPassword.success.description=Du kan nå låse opp hvelvet med det valgte passordet uten å ha behov for Hub-tilgang.
# New Password # New Password
newPassword.promptText=Skriv inn et nytt passord newPassword.promptText=Skriv inn et nytt passord
@@ -476,4 +499,12 @@ quit.lockAndQuitBtn=Lås og avslutt
# Forced Quit # Forced Quit
quit.forced.message=Noen hvelv kunne ikke låses quit.forced.message=Noen hvelv kunne ikke låses
quit.forced.description=Låsing av hvelvene ble blokkert av ventende operasjoner eller åpne filer. Du kan tvinge låsing av gjenværende hvelv, men forstyrring av I/O kan resultere i tap av ulagret data. quit.forced.description=Låsing av hvelvene ble blokkert av ventende operasjoner eller åpne filer. Du kan tvinge låsing av gjenværende hvelv, men forstyrring av I/O kan resultere i tap av ulagret data.
quit.forced.forceAndQuitBtn=Tvinge og avslutte quit.forced.forceAndQuitBtn=Tvinge og avslutte
# Update Reminder
updateReminder.title=Oppdateringssjekk
updateReminder.message=Se etter oppdateringer?
updateReminder.description=Hold deg oppdatert med nye funksjoner, feilrettinger og sikkerhetsforbedringer. Vi anbefaler å se etter oppdateringer automatisk.
updateReminder.notNow=Ikke nå
updateReminder.yesOnce=Ja, en gang
updateReminder.yesAutomatically=Ja, automatisk
+30 -6
View File
@@ -20,6 +20,11 @@ error.description=Oeps! Cryptomator verwachtte niet dat dit zou gebeuren. U kunt
error.hyperlink.lookup=Deze fout opzoeken error.hyperlink.lookup=Deze fout opzoeken
error.hyperlink.report=Deze fout melden error.hyperlink.report=Deze fout melden
error.technicalDetails=Details: error.technicalDetails=Details:
error.existingSolutionDescription=Cryptomator had niet verwacht dat dit zou gebeuren. Maar we hebben een bestaande oplossing voor deze fout gevonden. Neem een kijkje op de volgende link.
error.hyperlink.solution=Zoek de oplossing op
error.lookupPermissionMessage=Cryptomator kan online een oplossing voor dit probleem zoeken. Dit zal een aanvraag naar onze probleemdatabase verzenden vanaf uw IP-adres.
error.dismiss=Afwijzen
error.lookUpSolution=Oplossing opzoeken
# Defaults # Defaults
defaults.vault.vaultName=Kluis defaults.vault.vaultName=Kluis
@@ -35,10 +40,8 @@ traymenu.vault.reveal=Toon
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Kluis toevoegen addvaultwizard.title=Kluis toevoegen
## Welcome
addvaultwizard.welcome.newButton=Nieuwe Kluis Aanmaken
addvaultwizard.welcome.existingButton=Open Bestaande Kluis
## New ## New
addvaultwizard.new.title=Nieuwe kluis toevoegen
### Name ### Name
addvaultwizard.new.nameInstruction=Kies een naam voor de kluis addvaultwizard.new.nameInstruction=Kies een naam voor de kluis
addvaultwizard.new.namePrompt=Kluisnaam addvaultwizard.new.namePrompt=Kluisnaam
@@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=De kluisnaam mag de volgende karakter
addvaultwizard.new.validCharacters.chars=Woordtekens (b.v. a, ½ of ±) addvaultwizard.new.validCharacters.chars=Woordtekens (b.v. a, ½ of ±)
addvaultwizard.new.validCharacters.numbers=Nummers addvaultwizard.new.validCharacters.numbers=Nummers
addvaultwizard.new.validCharacters.dashes=Koppelteken (%s) of lage streep (%s) addvaultwizard.new.validCharacters.dashes=Koppelteken (%s) of lage streep (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Schakel geavanceerde instellingen in
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Voer een waarde in tussen 36 en 220 (standaard 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Open de documentatie om meer te leren.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maximale lengte van versleutelde bestandsnamen
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Geldig
### Password ### Password
addvaultwizard.new.createVaultBtn=Kluis aanmaken addvaultwizard.new.createVaultBtn=Kluis aanmaken
addvaultwizard.new.generateRecoveryKeyChoice=Zonder wachtwoord hebt u geen toegang tot uw data. Wilt u een herstelsleutel voor het geval u uw wachtwoord verliest? addvaultwizard.new.generateRecoveryKeyChoice=Zonder wachtwoord hebt u geen toegang tot uw data. Wilt u een herstelsleutel voor het geval u uw wachtwoord verliest?
@@ -82,6 +91,7 @@ addvault.new.readme.accessLocation.2=Dit is de opslaglocatie van uw kluis.
addvault.new.readme.accessLocation.3=Alle bestanden die aan dit volume worden toegevoegd zullen worden versleuteld door Cryptomator. U kunt deze bestanden gebruiken zoals in elke andere map/schijf. Dit is alleen een ontsleutelde weergave van de inhoud, uw bestanden blijven ten alle tijden versleuteld op uw harde schijf. addvault.new.readme.accessLocation.3=Alle bestanden die aan dit volume worden toegevoegd zullen worden versleuteld door Cryptomator. U kunt deze bestanden gebruiken zoals in elke andere map/schijf. Dit is alleen een ontsleutelde weergave van de inhoud, uw bestanden blijven ten alle tijden versleuteld op uw harde schijf.
addvault.new.readme.accessLocation.4=Voel je vrij om dit bestand te verwijderen. addvault.new.readme.accessLocation.4=Voel je vrij om dit bestand te verwijderen.
## Existing ## Existing
addvaultwizard.existing.title=Bestaande kluis toevoegen
addvaultwizard.existing.instruction=Kies het "vault.cryptomator"-bestand van uw bestaande kluis. Indien er enkel een bestand genaamd "masterkey.cryptomator" anwezig is, kies deze dan in de plaats. addvaultwizard.existing.instruction=Kies het "vault.cryptomator"-bestand van uw bestaande kluis. Indien er enkel een bestand genaamd "masterkey.cryptomator" anwezig is, kies deze dan in de plaats.
addvaultwizard.existing.chooseBtn=Kies… addvaultwizard.existing.chooseBtn=Kies…
addvaultwizard.existing.filePickerTitle=Kies kluisbestand addvaultwizard.existing.filePickerTitle=Kies kluisbestand
@@ -126,7 +136,11 @@ unlock.success.revealBtn=Toon Schijf
unlock.error.customPath.message=Kan kluis niet aan aangepast pad koppelen unlock.error.customPath.message=Kan kluis niet aan aangepast pad koppelen
unlock.error.customPath.description.notSupported=Als je het aangepaste pad wilt blijven gebruiken, ga dan naar de voorkeuren en selecteer een volume type dat het ondersteunt. Anders ga je naar de kluis opties en kies je een steunpunt voor het koppelplaten. unlock.error.customPath.description.notSupported=Als je het aangepaste pad wilt blijven gebruiken, ga dan naar de voorkeuren en selecteer een volume type dat het ondersteunt. Anders ga je naar de kluis opties en kies je een steunpunt voor het koppelplaten.
unlock.error.customPath.description.notExists=Het aangepaste koppelpad bestaat niet. Maak het aan in uw lokale bestandssysteem of verander het in de kluis opties. unlock.error.customPath.description.notExists=Het aangepaste koppelpad bestaat niet. Maak het aan in uw lokale bestandssysteem of verander het in de kluis opties.
unlock.error.customPath.description.generic=Je hebt een aangepast koppel pad geselecteerd voor deze kluis, maar het gebruik ervan is mislukt met het bericht: %s unlock.error.customPath.description.inUse=De schijfletter of aangepaste pad "%s" is al in gebruik.
unlock.error.customPath.description.hideawayNotDir=Het tijdelijk verborgen bestand "%3$s" gebruikt voor de ontgrendeling kon niet worden verwijderd. Controleer het bestand en verwijder het handmatig.
unlock.error.customPath.description.couldNotBeCleaned=Uw kluis kon niet worden gekoppeld aan het pad "%s". Probeer het opnieuw of kies een ander pad.
unlock.error.customPath.description.notEmptyDir=Het aangepaste pad "%s" is geen lege map. Kies een lege map en probeer het opnieuw.
unlock.error.customPath.description.generic=Je hebt een aangepast koppelpad voor deze kluis geselecteerd, maar gebruik ervan is mislukt met het bericht: %2$s
## Hub ## Hub
hub.noKeychain.message=Geen toegang tot de apparaatsleutel hub.noKeychain.message=Geen toegang tot de apparaatsleutel
hub.noKeychain.description=Om Hub kluizen te ontgrendelen is een apparaatsleutel vereist, die met een sleutelhanger wordt beveiligd. Om verder te gaan, schakel "%s" in en selecteer een sleutelhanger in de voorkeursinstellingen. hub.noKeychain.description=Om Hub kluizen te ontgrendelen is een apparaatsleutel vereist, die met een sleutelhanger wordt beveiligd. Om verder te gaan, schakel "%s" in en selecteer een sleutelhanger in de voorkeursinstellingen.
@@ -351,7 +365,9 @@ main.vaultlist.contextMenu.unlock=Ontgrendelen…
main.vaultlist.contextMenu.unlockNow=Nu Ontgrendelen main.vaultlist.contextMenu.unlockNow=Nu Ontgrendelen
main.vaultlist.contextMenu.vaultoptions=Laat kluisinstellingen zien main.vaultlist.contextMenu.vaultoptions=Laat kluisinstellingen zien
main.vaultlist.contextMenu.reveal=Toon Schijf main.vaultlist.contextMenu.reveal=Toon Schijf
main.vaultlist.addVaultBtn=Kluis toevoegen main.vaultlist.addVaultBtn=Toevoegen
main.vaultlist.addVaultBtn.menuItemNew=Nieuwe kluis...
main.vaultlist.addVaultBtn.menuItemExisting=Bestaande kluis...
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Bedankt dat u Cryptomator heeft gekozen om uw bestanden te beschermen. Voor assistentie verwijzen we u naar de starthandleidingen: main.vaultDetail.welcomeOnboarding=Bedankt dat u Cryptomator heeft gekozen om uw bestanden te beschermen. Voor assistentie verwijzen we u naar de starthandleidingen:
@@ -487,4 +503,12 @@ quit.lockAndQuitBtn=Vergrendelen en Afsluiten
# Forced Quit # Forced Quit
quit.forced.message=Sommige kluizen konden niet vergrendeld worden quit.forced.message=Sommige kluizen konden niet vergrendeld worden
quit.forced.description=Kluizen vergrendelen is geblokkeerd door openstaande bewerkingen of geopende bestanden. U kunt de resterende kluizen forceren, maar het onderbreken van I/O kan leiden tot het verlies van niet-opgeslagen gegevens. quit.forced.description=Kluizen vergrendelen is geblokkeerd door openstaande bewerkingen of geopende bestanden. U kunt de resterende kluizen forceren, maar het onderbreken van I/O kan leiden tot het verlies van niet-opgeslagen gegevens.
quit.forced.forceAndQuitBtn=Forceren en afsluiten quit.forced.forceAndQuitBtn=Forceren en afsluiten
# Update Reminder
updateReminder.title=Zoek naar updates
updateReminder.message=Controleren op updates?
updateReminder.description=Blijf op de hoogte met nieuwe functies, bugfixes en beveiligingsverbeteringen. We raden aan om automatisch te controleren op updates.
updateReminder.notNow=Niet nu
updateReminder.yesOnce=Ja, Eenmaal
updateReminder.yesAutomatically=Ja, automatisch
@@ -29,9 +29,6 @@ traymenu.vault.reveal=Gjer synleg
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Legg til kvelv addvaultwizard.title=Legg til kvelv
## Welcome
addvaultwizard.welcome.newButton=Opprett ein ny kvelv
addvaultwizard.welcome.existingButton=Opn ein eksisterande kvelv
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Vel eit namn på kvelven addvaultwizard.new.nameInstruction=Vel eit namn på kvelven
@@ -43,6 +40,7 @@ addvaultwizard.new.locationPrompt=…
addvaultwizard.new.directoryPickerLabel=Tilpassa lagringsstad addvaultwizard.new.directoryPickerLabel=Tilpassa lagringsstad
addvaultwizard.new.directoryPickerButton=Vel… addvaultwizard.new.directoryPickerButton=Vel…
addvaultwizard.new.directoryPickerTitle=Vel mappe addvaultwizard.new.directoryPickerTitle=Vel mappe
### Expert Settings
### Password ### Password
addvaultwizard.new.createVaultBtn=Opprett kvelven addvaultwizard.new.createVaultBtn=Opprett kvelven
addvaultwizard.new.generateRecoveryKeyChoice=Du vil ikkje kunna få tilgang til dataa dine utan passordet. Vil du ha ein gjenopprettingsnøkkel i tilfelle du mistar passordet ditt? addvaultwizard.new.generateRecoveryKeyChoice=Du vil ikkje kunna få tilgang til dataa dine utan passordet. Vil du ha ein gjenopprettingsnøkkel i tilfelle du mistar passordet ditt?
@@ -182,7 +180,6 @@ main.vaultlist.contextMenu.lock=Lås
main.vaultlist.contextMenu.unlock=Lås opp… main.vaultlist.contextMenu.unlock=Lås opp…
main.vaultlist.contextMenu.unlockNow=Lås opp no main.vaultlist.contextMenu.unlockNow=Lås opp no
main.vaultlist.contextMenu.reveal=Gjer eininga synleg main.vaultlist.contextMenu.reveal=Gjer eininga synleg
main.vaultlist.addVaultBtn=Legg til kvelv
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Takk for at du valde Cryptomator for å verna filene dine. Viss du treng hjelp, sjekk ut guidane våre for å komma i gang: main.vaultDetail.welcomeOnboarding=Takk for at du valde Cryptomator for å verna filene dine. Viss du treng hjelp, sjekk ut guidane våre for å komma i gang:
@@ -273,4 +270,6 @@ passwordStrength.messageLabel.4=Veldig sterkt
# Quit # Quit
quit.lockAndQuitBtn=Lås og avslutt quit.lockAndQuitBtn=Lås og avslutt
# Forced Quit # Forced Quit
# Update Reminder
@@ -30,9 +30,6 @@ traymenu.vault.reveal=ਦਿਖਾਓ
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=ਵਾਲਟ ਜੋੜੋ addvaultwizard.title=ਵਾਲਟ ਜੋੜੋ
## Welcome
addvaultwizard.welcome.newButton=ਨਵਾਂ ਵਾਲਟ ਬਣਾਓ
addvaultwizard.welcome.existingButton=ਮੌਜੂਦਾ ਵਾਲਟ ਖੋਲ੍ਹੋ
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=ਵਾਲਟ ਲਈ ਨਾਂ ਚੁਣੋ addvaultwizard.new.nameInstruction=ਵਾਲਟ ਲਈ ਨਾਂ ਚੁਣੋ
@@ -44,6 +41,7 @@ addvaultwizard.new.locationPrompt=…
addvaultwizard.new.directoryPickerLabel=ਪਸੰਦੀਦਾ ਟਿਕਾਣਾ addvaultwizard.new.directoryPickerLabel=ਪਸੰਦੀਦਾ ਟਿਕਾਣਾ
addvaultwizard.new.directoryPickerButton=…ਚੁਣੋ addvaultwizard.new.directoryPickerButton=…ਚੁਣੋ
addvaultwizard.new.directoryPickerTitle=ਡਾਇਰੈਕਟਰੀ ਚੁਣੋ addvaultwizard.new.directoryPickerTitle=ਡਾਇਰੈਕਟਰੀ ਚੁਣੋ
### Expert Settings
### Password ### Password
addvaultwizard.new.createVaultBtn=ਵਾਲਟ ਬਣਾਓ addvaultwizard.new.createVaultBtn=ਵਾਲਟ ਬਣਾਓ
addvaultwizard.new.generateRecoveryKeyChoice=ਤੁਸੀਂ ਬਿਨਾਂ ਪਾਸਵਰਡ ਦੇ ਆਪਣੇ ਡਾਟੇ ਨੂੰ ਇਸਤੇਮਾਲ ਨਹੀਂ ਕਰ ਸਕੋਗੇ। ਕੀ ਤੁਸੀਂ ਰਿਕਵਰੀ ਕੁੰਜੀ ਚਾਹੋਗੇ, ਜੇ ਕਿਤੇ ਤੁਸੀਂ ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਜਾਓ? addvaultwizard.new.generateRecoveryKeyChoice=ਤੁਸੀਂ ਬਿਨਾਂ ਪਾਸਵਰਡ ਦੇ ਆਪਣੇ ਡਾਟੇ ਨੂੰ ਇਸਤੇਮਾਲ ਨਹੀਂ ਕਰ ਸਕੋਗੇ। ਕੀ ਤੁਸੀਂ ਰਿਕਵਰੀ ਕੁੰਜੀ ਚਾਹੋਗੇ, ਜੇ ਕਿਤੇ ਤੁਸੀਂ ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਜਾਓ?
@@ -209,7 +207,6 @@ main.vaultlist.contextMenu.lock=ਲਾਕ ਕਰੋ
main.vaultlist.contextMenu.unlock=ਅਣ-ਲਾਕ ਕਰੋ… main.vaultlist.contextMenu.unlock=ਅਣ-ਲਾਕ ਕਰੋ…
main.vaultlist.contextMenu.unlockNow=ਹੁਣੇ ਅਣ-ਲਾਕ ਕਰੋ main.vaultlist.contextMenu.unlockNow=ਹੁਣੇ ਅਣ-ਲਾਕ ਕਰੋ
main.vaultlist.contextMenu.reveal=ਡਰਾਇਵ ਦਿਖਾਓ main.vaultlist.contextMenu.reveal=ਡਰਾਇਵ ਦਿਖਾਓ
main.vaultlist.addVaultBtn=ਵਾਲਟ ਜੋੜੋ
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=ਆਪਣੀਆਂ ਫਾਇਲਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰਨ ਲਈ Cryptomator ਚੁਣਨ ਵਾਸਤੇ ਧੰਨਵਾਦ ਹੈ। ਜੇ ਤੁਹਾਨੂੰ ਮਦਦ ਚਾਹੀਦੀ ਹੋਵੇ ਤਾਂ ਸਾਡੀਆਂ ਸ਼ੁਰੂਆਤੀ ਗਾਈਡਾਂ ਵੇਖੋ: main.vaultDetail.welcomeOnboarding=ਆਪਣੀਆਂ ਫਾਇਲਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰਨ ਲਈ Cryptomator ਚੁਣਨ ਵਾਸਤੇ ਧੰਨਵਾਦ ਹੈ। ਜੇ ਤੁਹਾਨੂੰ ਮਦਦ ਚਾਹੀਦੀ ਹੋਵੇ ਤਾਂ ਸਾਡੀਆਂ ਸ਼ੁਰੂਆਤੀ ਗਾਈਡਾਂ ਵੇਖੋ:
@@ -305,4 +302,6 @@ passwordStrength.messageLabel.4=ਬਹੁਤ ਮਜ਼ਬੂਤ
# Quit # Quit
quit.lockAndQuitBtn=ਲਾਕ ਕਰੋ ਤੇ ਬਾਹਰ ਜਾਓ quit.lockAndQuitBtn=ਲਾਕ ਕਰੋ ਤੇ ਬਾਹਰ ਜਾਓ
# Forced Quit # Forced Quit
# Update Reminder
+39 -16
View File
@@ -20,6 +20,11 @@ error.description=Cryptomator nie spodziewał się czegoś takiego. Możesz wysz
error.hyperlink.lookup=Wyszukaj ten błąd error.hyperlink.lookup=Wyszukaj ten błąd
error.hyperlink.report=Zgłoś ten błąd error.hyperlink.report=Zgłoś ten błąd
error.technicalDetails=Szczegóły: error.technicalDetails=Szczegóły:
error.existingSolutionDescription=Cryptomator nie spodziewał się, że tak się stanie. Znaleźliśmy jednak istniejące rozwiązanie dla tego błędu. Proszę spojrzeć na poniższy link.
error.hyperlink.solution=Wyszukaj rozwiązanie
error.lookupPermissionMessage=Cryptomator może wyszukać rozwiązanie tego problemu online. To wyśle żądanie do naszej bazy danych problemów z Twojego adresu IP.
error.dismiss=Odrzuć
error.lookUpSolution=Szukaj rozwiązania
# Defaults # Defaults
defaults.vault.vaultName=Sejf defaults.vault.vaultName=Sejf
@@ -35,10 +40,8 @@ traymenu.vault.reveal=Odkryj
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Dodaj sejf addvaultwizard.title=Dodaj sejf
## Welcome
addvaultwizard.welcome.newButton=Utwórz nowy sejf
addvaultwizard.welcome.existingButton=Otwórz istniejący sejf
## New ## New
addvaultwizard.new.title=Dodaj nowy sejf
### Name ### Name
addvaultwizard.new.nameInstruction=Wybierz nazwę sejfu addvaultwizard.new.nameInstruction=Wybierz nazwę sejfu
addvaultwizard.new.namePrompt=Nazwa sejfu addvaultwizard.new.namePrompt=Nazwa sejfu
@@ -59,6 +62,12 @@ addvaultwizard.new.validCharacters.message=Nazwa sejfu może zawierać następuj
addvaultwizard.new.validCharacters.chars=Znaki słów (np. a, ж lub 수) addvaultwizard.new.validCharacters.chars=Znaki słów (np. a, ж lub 수)
addvaultwizard.new.validCharacters.numbers=Liczby addvaultwizard.new.validCharacters.numbers=Liczby
addvaultwizard.new.validCharacters.dashes=Myślnik (%s) lub podkreślenie (%s) addvaultwizard.new.validCharacters.dashes=Myślnik (%s) lub podkreślenie (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Włącz ustawienia eksperta
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Wprowadź wartość między 36 a 220 (domyślnie 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Otwórz dokumentację, aby dowiedzieć się więcej.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Maksymalna długość zaszyfrowanych nazw plików
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Poprawne
### Password ### Password
addvaultwizard.new.createVaultBtn=Utwórz sejf addvaultwizard.new.createVaultBtn=Utwórz sejf
addvaultwizard.new.generateRecoveryKeyChoice=Nie będziesz mógł uzyskać dostępu do swoich danych bez hasła. Czy chciałbyś klucz odzyskiwania w przypadku utraty hasła? addvaultwizard.new.generateRecoveryKeyChoice=Nie będziesz mógł uzyskać dostępu do swoich danych bez hasła. Czy chciałbyś klucz odzyskiwania w przypadku utraty hasła?
@@ -82,6 +91,7 @@ addvault.new.readme.accessLocation.2=Tu są przechowywane pliki Twojego sejfu.
addvault.new.readme.accessLocation.3=Wszystkie pliki dodane tutaj zostaną zaszyfrowane przez Cryptomator. Możesz tu wykonywać operacje jak na każdym innym dysku czy katalogu. To jest jedynie odszyfrowany podgląd Twoich plików, wszystkie pozostają cały czas zaszyfrowane na Twoim dysku twardym. addvault.new.readme.accessLocation.3=Wszystkie pliki dodane tutaj zostaną zaszyfrowane przez Cryptomator. Możesz tu wykonywać operacje jak na każdym innym dysku czy katalogu. To jest jedynie odszyfrowany podgląd Twoich plików, wszystkie pozostają cały czas zaszyfrowane na Twoim dysku twardym.
addvault.new.readme.accessLocation.4=Jeśli chcesz możesz spokojnie usunąć ten plik. addvault.new.readme.accessLocation.4=Jeśli chcesz możesz spokojnie usunąć ten plik.
## Existing ## Existing
addvaultwizard.existing.title=Dodaj istniejący sejf
addvaultwizard.existing.instruction=Wybierz plik "vault.cryptomator" w istniejącym sejfie. Jeśli istnieje tylko plik "masterkey.cryptomator", wybierz ten plik. addvaultwizard.existing.instruction=Wybierz plik "vault.cryptomator" w istniejącym sejfie. Jeśli istnieje tylko plik "masterkey.cryptomator", wybierz ten plik.
addvaultwizard.existing.chooseBtn=Wybierz… addvaultwizard.existing.chooseBtn=Wybierz…
addvaultwizard.existing.filePickerTitle=Wybierz plik sejfu addvaultwizard.existing.filePickerTitle=Wybierz plik sejfu
@@ -126,7 +136,10 @@ unlock.success.revealBtn=Pokaż Dysk
unlock.error.customPath.message=Nie można zamontować sejfu na niestandardowej ścieżce unlock.error.customPath.message=Nie można zamontować sejfu na niestandardowej ścieżce
unlock.error.customPath.description.notSupported=Jeśli chcesz nadal używać niestandardowej ścieżki, przejdź do preferencji i wybierz typ udziału, który ją obsługuje. W przeciwnym razie przejdź do opcji sejfu i wybierz obsługiwany punkt montowania. unlock.error.customPath.description.notSupported=Jeśli chcesz nadal używać niestandardowej ścieżki, przejdź do preferencji i wybierz typ udziału, który ją obsługuje. W przeciwnym razie przejdź do opcji sejfu i wybierz obsługiwany punkt montowania.
unlock.error.customPath.description.notExists=Niestandardowa ścieżka montowania nie istnieje. Stwórz ją w lokalnym systemie plików lub zmień ją w opcjach sejfu. unlock.error.customPath.description.notExists=Niestandardowa ścieżka montowania nie istnieje. Stwórz ją w lokalnym systemie plików lub zmień ją w opcjach sejfu.
unlock.error.customPath.description.generic=Wybrałeś niestandardową ścieżkę montowania dla tego sejfu, ale użycie jej nie powiodło się z wiadomością: %s unlock.error.customPath.description.inUse=Litera dysku lub podana ścieżka montowania "%s" jest już w użyciu.
unlock.error.customPath.description.couldNotBeCleaned=Twój sejf nie mógł być zamontowany do ścieżki "%s". Spróbuj ponownie lub wybierz inną ścieżkę.
unlock.error.customPath.description.notEmptyDir=Wybrana ścieżka montowania "%s" nie jest pustym katalogiem. Wybierz pusty katalog i spróbuj ponownie.
unlock.error.customPath.description.generic=Wybrałeś własną ścieżkę montowania dla tego sejfu, ale użycie jej nie powiodło się. Powód: %2$s
## Hub ## Hub
hub.noKeychain.message=Brak dostępu do klucza urządzenia hub.noKeychain.message=Brak dostępu do klucza urządzenia
hub.noKeychain.description=Aby odblokować sejfy na Hubie, wymagany jest klucz urządzenia zabezpieczony za pomocą pęku kluczy. Aby kontynuować, włącz "%s" i wybierz Pęk kluczy w ustawieniach. hub.noKeychain.description=Aby odblokować sejfy na Hubie, wymagany jest klucz urządzenia zabezpieczony za pomocą pęku kluczy. Aby kontynuować, włącz "%s" i wybierz Pęk kluczy w ustawieniach.
@@ -307,29 +320,29 @@ stats.title=Statystyki dla %s
stats.cacheHitRate=Trafność cache stats.cacheHitRate=Trafność cache
## Read ## Read
stats.read.throughput.idle=Odczyt: bezczynny stats.read.throughput.idle=Odczyt: bezczynny
stats.read.throughput.kibs=Odczyt: %.2f kiB/s stats.read.throughput.kibs=Odczyt: %.2f KiB/s
stats.read.throughput.mibs=Odczyt: %.2f kiB/s stats.read.throughput.mibs=Odczyt: %.2f MiB/s
stats.read.total.data.none=Dane odczytywane: - stats.read.total.data.none=Dane odczytywane: -
stats.read.total.data.kib=Odczyt danych: %.1f KiB stats.read.total.data.kib=Odczyt danych: %.1f KiB
stats.read.total.data.mib=Odczyt danych: %.1f kiB stats.read.total.data.mib=Odczyt danych: %.1f MiB
stats.read.total.data.gib=Odczyt danych: %.1f kiB stats.read.total.data.gib=Odczyt danych: %.1f GiB
stats.decr.total.data.none=Dane odszyfrowane: - stats.decr.total.data.none=Dane odszyfrowane: -
stats.decr.total.data.kib=Dane odszyfrowane: %.1f KiB stats.decr.total.data.kib=Dane odszyfrowane: %.1f KiB
stats.decr.total.data.mib=Dane odszyfrowane: %.1f kiB stats.decr.total.data.mib=Dane odszyfrowane: %.1f MiB
stats.decr.total.data.gib=Dane odszyfrowane: %.1f kiB stats.decr.total.data.gib=Dane odszyfrowane: %.1f GiB
stats.read.accessCount=Całkowite odczyty: %d stats.read.accessCount=Całkowite odczyty: %d
## Write ## Write
stats.write.throughput.idle=Zapis: bezczynny stats.write.throughput.idle=Zapis: bezczynny
stats.write.throughput.kibs=Zapis: %.2f KiB/s stats.write.throughput.kibs=Zapis: %.2f KiB/s
stats.write.throughput.mibs=Zapis: %.2f kiB/s stats.write.throughput.mibs=Zapis: %.2f MiB/s
stats.write.total.data.none=Zapisane dane: - stats.write.total.data.none=Zapisane dane: -
stats.write.total.data.kib=Zapis danych: %.1f KiB stats.write.total.data.kib=Zapis danych: %.1f KiB
stats.write.total.data.mib=Zapisane dane: %.1f MiB stats.write.total.data.mib=Zapisane dane: %.1f MiB
stats.write.total.data.gib=Zapisane dane: %.1f kiB stats.write.total.data.gib=Zapisane dane: %.1f GiB
stats.encr.total.data.none=Dane odszyfrowane: - stats.encr.total.data.none=Dane odszyfrowane: -
stats.encr.total.data.kib=Dane zaszyfrowane: %.1f KiB stats.encr.total.data.kib=Dane zaszyfrowane: %.1f KiB
stats.encr.total.data.mib=Dane odszyfrowane: %.1f kiB stats.encr.total.data.mib=Dane odszyfrowane: %.1f MiB
stats.encr.total.data.gib=Dane odszyfrowane: %.1f kiB stats.encr.total.data.gib=Dane odszyfrowane: %.1f GiB
stats.write.accessCount=Całkowity zapis: %d stats.write.accessCount=Całkowity zapis: %d
## Accesses ## Accesses
@@ -351,7 +364,9 @@ main.vaultlist.contextMenu.unlock=Odblokuj…
main.vaultlist.contextMenu.unlockNow=Odblokuj teraz main.vaultlist.contextMenu.unlockNow=Odblokuj teraz
main.vaultlist.contextMenu.vaultoptions=Pokaż opcje sejfu main.vaultlist.contextMenu.vaultoptions=Pokaż opcje sejfu
main.vaultlist.contextMenu.reveal=Otwórz lokalizację main.vaultlist.contextMenu.reveal=Otwórz lokalizację
main.vaultlist.addVaultBtn=Dodaj sejf main.vaultlist.addVaultBtn=Dodaj
main.vaultlist.addVaultBtn.menuItemNew=Nowy sejf...
main.vaultlist.addVaultBtn.menuItemExisting=Istniejący sejf...
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Dziękujemy za wybranie programu Cryptomator do ochrony plików. Jeśli potrzebujesz pomocy, sprawdź nasze przewodniki: main.vaultDetail.welcomeOnboarding=Dziękujemy za wybranie programu Cryptomator do ochrony plików. Jeśli potrzebujesz pomocy, sprawdź nasze przewodniki:
@@ -487,4 +502,12 @@ quit.lockAndQuitBtn=Zablokuj i wyjdź
# Forced Quit # Forced Quit
quit.forced.message=Niektóre sejfy nie mogą być zablokowane quit.forced.message=Niektóre sejfy nie mogą być zablokowane
quit.forced.description=Blokowanie sejfów zostało zablokowane przez oczekujące operacje lub otwarte pliki. Możesz wymusić zablokowanie pozostałych sejfów, jednak przerwanie I/O może spowodować utratę niezapisanych danych. quit.forced.description=Blokowanie sejfów zostało zablokowane przez oczekujące operacje lub otwarte pliki. Możesz wymusić zablokowanie pozostałych sejfów, jednak przerwanie I/O może spowodować utratę niezapisanych danych.
quit.forced.forceAndQuitBtn=Wymuś i wyjdź quit.forced.forceAndQuitBtn=Wymuś i wyjdź
# Update Reminder
updateReminder.title=Sprawdzanie aktualizacji
updateReminder.message=Sprawdzić aktualizacje?
updateReminder.description=Bądź na bieżąco z nowymi funkcjami, poprawkami błędów i poprawkami bezpieczeństwa. Zalecamy automatyczne sprawdzanie aktualizacji.
updateReminder.notNow=Nie teraz
updateReminder.yesOnce=Tak, raz
updateReminder.yesAutomatically=Tak, automatycznie
+50 -17
View File
@@ -20,6 +20,11 @@ error.description=Opa! Cryptomator não esperava que isto acontecesse. Pode proc
error.hyperlink.lookup=Procure este erro error.hyperlink.lookup=Procure este erro
error.hyperlink.report=Relatar este erro error.hyperlink.report=Relatar este erro
error.technicalDetails=Detalhes: error.technicalDetails=Detalhes:
error.existingSolutionDescription=O Cryptomator não esperava que isso acontecesse. Mas encontrámos uma solução existente para esse erro. Por favor, veja o seguinte link.
error.hyperlink.solution=Procure a solução
error.lookupPermissionMessage=O Cryptomator pode procurar uma solução on-line para este problema. Isso enviará uma solicitação do problema à nossa base de dados a partir do seu endereço IP.
error.dismiss=Ignorar
error.lookUpSolution=Procure solução
# Defaults # Defaults
defaults.vault.vaultName=Cofre defaults.vault.vaultName=Cofre
@@ -35,9 +40,6 @@ traymenu.vault.reveal=Revelar
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Adicionar Cofre addvaultwizard.title=Adicionar Cofre
## Welcome
addvaultwizard.welcome.newButton=Criar Novo Cofre
addvaultwizard.welcome.existingButton=Abrir Cofre Existente
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Escolha um nome para o cofre addvaultwizard.new.nameInstruction=Escolha um nome para o cofre
@@ -59,6 +61,12 @@ addvaultwizard.new.validCharacters.message=O nome do cofre pode conter os seguin
addvaultwizard.new.validCharacters.chars=Caracteres válidos (p. ex. a, ж ou 수) addvaultwizard.new.validCharacters.chars=Caracteres válidos (p. ex. a, ж ou 수)
addvaultwizard.new.validCharacters.numbers=Números addvaultwizard.new.validCharacters.numbers=Números
addvaultwizard.new.validCharacters.dashes=Hífen (%s) ou sublinhado (%s) addvaultwizard.new.validCharacters.dashes=Hífen (%s) ou sublinhado (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Ativar configurações avançadas
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Digite um valor entre 36 e 220 (padrão 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Abra a documentação para saber mais.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Comprimento máximo dos ficheiros encriptados
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Válido
### Password ### Password
addvaultwizard.new.createVaultBtn=Criar Cofre addvaultwizard.new.createVaultBtn=Criar Cofre
addvaultwizard.new.generateRecoveryKeyChoice=Não será capaz de aceder aos seus dados sem a sua palavra-passe. Quer uma chave de recuperação para caso perca a sua palavra-passe? addvaultwizard.new.generateRecoveryKeyChoice=Não será capaz de aceder aos seus dados sem a sua palavra-passe. Quer uma chave de recuperação para caso perca a sua palavra-passe?
@@ -70,8 +78,8 @@ addvault.new.readme.storageLocation.1=⚠ ARQUIVOS DO COFRE ⚠
addvault.new.readme.storageLocation.2=Este é o local de armazenamento do seu cofre. addvault.new.readme.storageLocation.2=Este é o local de armazenamento do seu cofre.
addvault.new.readme.storageLocation.3=NÃO FAÇA addvault.new.readme.storageLocation.3=NÃO FAÇA
addvault.new.readme.storageLocation.4=- alterar quaisquer ficheiros dentro deste directório ou addvault.new.readme.storageLocation.4=- alterar quaisquer ficheiros dentro deste directório ou
addvault.new.readme.storageLocation.5=- colar quaisquer ficheiros para encriptação neste directório. addvault.new.readme.storageLocation.5=- colar quaisquer ficheiros para encriptação neste diretório.
addvault.new.readme.storageLocation.6=Se deseja criptografar arquivos e visualizar o conteúdo do cofre, faça o seguinte: addvault.new.readme.storageLocation.6=Se deseja encriptar arquivos e visualizar o conteúdo do cofre, faça o seguinte:
addvault.new.readme.storageLocation.7=1. Adicione este cofre ao Cryptomator. addvault.new.readme.storageLocation.7=1. Adicione este cofre ao Cryptomator.
addvault.new.readme.storageLocation.8=2. Desbloqueie o cofre no Cryptomator. addvault.new.readme.storageLocation.8=2. Desbloqueie o cofre no Cryptomator.
addvault.new.readme.storageLocation.9=3. Abra o local de acesso clicando no botão "Revelar". addvault.new.readme.storageLocation.9=3. Abra o local de acesso clicando no botão "Revelar".
@@ -111,7 +119,7 @@ forgetPassword.confirmBtn=Esquecer a Palavra-passe
unlock.title=Desbloquear "%s" unlock.title=Desbloquear "%s"
unlock.passwordPrompt=Insira a senha para "%s": unlock.passwordPrompt=Insira a senha para "%s":
unlock.savePassword=Recordar a palavra-passe unlock.savePassword=Recordar a palavra-passe
unlock.unlockBtn=Destrancar unlock.unlockBtn=Desbloquear
## Select ## Select
unlock.chooseMasterkey.message=Chave Mestra não encontrada unlock.chooseMasterkey.message=Chave Mestra não encontrada
unlock.chooseMasterkey.description=Não foi possível encontrar o ficheiro masterkey no local predefinido para este cofre. Por favor, escolha o ficheiro chave manualmente. unlock.chooseMasterkey.description=Não foi possível encontrar o ficheiro masterkey no local predefinido para este cofre. Por favor, escolha o ficheiro chave manualmente.
@@ -124,6 +132,13 @@ unlock.success.rememberChoice=Lembrar escolha, não mostrar isto novamente
unlock.success.revealBtn=Revelar unidade unlock.success.revealBtn=Revelar unidade
## Failure ## Failure
unlock.error.customPath.message=Não é possível montar o cofre no caminho personalizado unlock.error.customPath.message=Não é possível montar o cofre no caminho personalizado
unlock.error.customPath.description.notSupported=Se pretender continuar a utilizar o caminho personalizado, vá às preferências e seleccione um tipo de volume que o suporte. Caso contrário, aceda às opções do vault e escolha um ponto de montagem suportado.
unlock.error.customPath.description.notExists=O caminho de montagem personalizado não existe. Crie-o no seu sistema de ficheiros local ou altere-o nas opções do vault.
unlock.error.customPath.description.inUse=A letra da unidade ou o caminho de montagem personalizado "%s" já está em uso.
unlock.error.customPath.description.hideawayNotDir=O arquivo oculto temporário "%3$s" usado para desbloquear não pôde ser removido. Verifique o arquivo e exclua-o manualmente.
unlock.error.customPath.description.couldNotBeCleaned=Não foi possível montar o seu cofre no caminho "%s". Tente novamente ou escolha um caminho diferente.
unlock.error.customPath.description.notEmptyDir=O caminho de montagem personalizado "%s" não é uma pasta vazia. Escolha uma pasta vazia e tente novamente.
unlock.error.customPath.description.generic=Selecionou um caminho de montagem personalizado para este cofre, mas o seu uso falhou com a mensagem: %2$s
## Hub ## Hub
hub.noKeychain.message=Não foi possível aceder à chave do dispositivo hub.noKeychain.message=Não foi possível aceder à chave do dispositivo
hub.noKeychain.description=Para desbloquear os cofres do Hub, é necessária uma chave do dispositivo, que é protegida usando um porta-chaves. Para continuar, ative “%s” e selecione um porta-chaves nas preferências. hub.noKeychain.description=Para desbloquear os cofres do Hub, é necessária uma chave do dispositivo, que é protegida usando um porta-chaves. Para continuar, ative “%s” e selecione um porta-chaves nas preferências.
@@ -138,11 +153,11 @@ hub.receive.description=Cryptomator está a receber e a processar a resposta do
### Register Device ### Register Device
hub.register.message=Nome do dispositivo necessário hub.register.message=Nome do dispositivo necessário
hub.register.description=Parece ser o primeiro acesso ao Hub a partir deste dispositivo. Para identificá-lo para autorização de acesso, é preciso dar um nome a este dispositivo. hub.register.description=Parece ser o primeiro acesso ao Hub a partir deste dispositivo. Para identificá-lo para autorização de acesso, é preciso dar um nome a este dispositivo.
hub.register.nameLabel=Nome do Dispositivo hub.register.nameLabel=Nome do dispositivo
hub.register.occupiedMsg=Nome já utilizado hub.register.occupiedMsg=Nome já utilizado
hub.register.registerBtn=Confirmar hub.register.registerBtn=Confirmar
### Registration Success ### Registration Success
hub.registerSuccess.message=Nome de Dispositivo hub.registerSuccess.message=Nome do dispositivo
hub.registerSuccess.description=Para aceder ao cofre, o seu dispositivo precisa de ser autorizado pelo proprietário do cofre. hub.registerSuccess.description=Para aceder ao cofre, o seu dispositivo precisa de ser autorizado pelo proprietário do cofre.
### Registration Failed ### Registration Failed
hub.registerFailed.message=Falha ao nomear o dispositivo hub.registerFailed.message=Falha ao nomear o dispositivo
@@ -176,7 +191,7 @@ migration.run.startMigrationBtn=Migrar Cofre
migration.run.progressHint=Isso pode levar algum tempo… migration.run.progressHint=Isso pode levar algum tempo…
## Success ## Success
migration.success.nextStepsInstructions="%s" foi migrado com sucesso.\nPoderá desbloquear o seu cofre agora. migration.success.nextStepsInstructions="%s" foi migrado com sucesso.\nPoderá desbloquear o seu cofre agora.
migration.success.unlockNow=Destrancar agora migration.success.unlockNow=Desbloquear agora
## Missing file system capabilities ## Missing file system capabilities
migration.error.missingFileSystemCapabilities.title=Sistema de ficheiros não suportado migration.error.missingFileSystemCapabilities.title=Sistema de ficheiros não suportado
migration.error.missingFileSystemCapabilities.description=O processo de migração não foi iniciado, porque o seu cofre está localizado num sistema de ficheiros inadequado. migration.error.missingFileSystemCapabilities.description=O processo de migração não foi iniciado, porque o seu cofre está localizado num sistema de ficheiros inadequado.
@@ -223,6 +238,10 @@ health.result.severityFilter.good=Ótimo
health.result.severityFilter.info=Informações health.result.severityFilter.info=Informações
health.result.severityFilter.warn=Atenção health.result.severityFilter.warn=Atenção
health.result.severityFilter.crit=Crítico health.result.severityFilter.crit=Crítico
health.result.fixStateFilter.all=Estado de reparação - Todos
health.result.fixStateFilter.fixable=Reparável
health.result.fixStateFilter.notFixable=Não reparável
health.result.fixStateFilter.fixing=Reparação…
health.result.fixStateFilter.fixed=Corrigido health.result.fixStateFilter.fixed=Corrigido
health.result.fixStateFilter.fixFailed=Falha na correção health.result.fixStateFilter.fixFailed=Falha na correção
## Fix Application ## Fix Application
@@ -274,6 +293,12 @@ preferences.about=Sobre
# Vault Statistics # Vault Statistics
stats.title=Estatísticas de %s stats.title=Estatísticas de %s
## Read ## Read
stats.read.throughput.kibs=Leitura: %.2f KiB/s
stats.read.throughput.mibs=Leitura: %.2f MiB/s
stats.read.total.data.none=Dados lidos: -
stats.read.total.data.kib=Dados lidos: %.1f KiB
stats.read.total.data.mib=Dados lidos: %.1f MiB
stats.read.total.data.gib=Dados lidos: %.1f GiB
stats.decr.total.data.none=Dados desencriptados: - stats.decr.total.data.none=Dados desencriptados: -
stats.decr.total.data.kib=Dados desencriptados: %.1f KiB stats.decr.total.data.kib=Dados desencriptados: %.1f KiB
stats.decr.total.data.mib=Dados desencriptados: %.1f MiB stats.decr.total.data.mib=Dados desencriptados: %.1f MiB
@@ -307,19 +332,18 @@ main.supporterCertificateMissing.tooltip=Por favor, considere doar
## Vault List ## Vault List
main.vaultlist.emptyList.onboardingInstruction=Clique aqui para adicionar um cofre main.vaultlist.emptyList.onboardingInstruction=Clique aqui para adicionar um cofre
main.vaultlist.contextMenu.remove=Remover… main.vaultlist.contextMenu.remove=Remover…
main.vaultlist.contextMenu.lock=Trancar main.vaultlist.contextMenu.lock=Bloquear
main.vaultlist.contextMenu.unlock=Desbloquear… main.vaultlist.contextMenu.unlock=Desbloquear…
main.vaultlist.contextMenu.unlockNow=Destrancar agora main.vaultlist.contextMenu.unlockNow=Desbloquear agora
main.vaultlist.contextMenu.vaultoptions=Mostrar opções do Cofre main.vaultlist.contextMenu.vaultoptions=Mostrar opções do Cofre
main.vaultlist.contextMenu.reveal=Revelar unidade main.vaultlist.contextMenu.reveal=Revelar unidade
main.vaultlist.addVaultBtn=Adicionar Cofre
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Obrigado por escolher Cryptomator para proteger os seus ficheiros. Se precisar de alguma ajuda, veja os nossos guias introdutórios: main.vaultDetail.welcomeOnboarding=Obrigado por escolher Cryptomator para proteger os seus ficheiros. Se precisar de alguma ajuda, veja os nossos guias introdutórios:
### Locked ### Locked
main.vaultDetail.lockedStatus=BLOQUEADO main.vaultDetail.lockedStatus=BLOQUEADO
main.vaultDetail.unlockBtn=Desbloquear… main.vaultDetail.unlockBtn=Desbloquear…
main.vaultDetail.unlockNowBtn=Destrancar agora main.vaultDetail.unlockNowBtn=Desbloquear agora
main.vaultDetail.optionsBtn=Opções do Cofre main.vaultDetail.optionsBtn=Opções do Cofre
main.vaultDetail.passwordSavedInKeychain=Palavra-passe guardada main.vaultDetail.passwordSavedInKeychain=Palavra-passe guardada
### Unlocked ### Unlocked
@@ -327,7 +351,7 @@ main.vaultDetail.unlockedStatus=DESBLOQUEADO
main.vaultDetail.accessLocation=O conteúdo do seu cofre está acessível aqui: main.vaultDetail.accessLocation=O conteúdo do seu cofre está acessível aqui:
main.vaultDetail.revealBtn=Revelar unidade main.vaultDetail.revealBtn=Revelar unidade
main.vaultDetail.copyUri=Copiar endereço main.vaultDetail.copyUri=Copiar endereço
main.vaultDetail.lockBtn=Trancar main.vaultDetail.lockBtn=Bloquear
main.vaultDetail.bytesPerSecondRead=Ler: main.vaultDetail.bytesPerSecondRead=Ler:
main.vaultDetail.bytesPerSecondWritten=Escrever: main.vaultDetail.bytesPerSecondWritten=Escrever:
main.vaultDetail.throughput.idle=inativo main.vaultDetail.throughput.idle=inativo
@@ -367,8 +391,8 @@ vaultOptions.general=Geral
vaultOptions.general.vaultName=Nome do Cofre vaultOptions.general.vaultName=Nome do Cofre
vaultOptions.general.autoLock.lockAfterTimePart1=Bloquear quando inativo por vaultOptions.general.autoLock.lockAfterTimePart1=Bloquear quando inativo por
vaultOptions.general.autoLock.lockAfterTimePart2=minutos vaultOptions.general.autoLock.lockAfterTimePart2=minutos
vaultOptions.general.unlockAfterStartup=Destrancar o cofre ao iniciar o Cryptomator vaultOptions.general.unlockAfterStartup=Desbloquear o cofre ao iniciar o Cryptomator
vaultOptions.general.actionAfterUnlock=Após destrancar com sucesso vaultOptions.general.actionAfterUnlock=Após desbloquear com sucesso
vaultOptions.general.actionAfterUnlock.ignore=Não fazer nada vaultOptions.general.actionAfterUnlock.ignore=Não fazer nada
vaultOptions.general.actionAfterUnlock.reveal=Revelar unidade vaultOptions.general.actionAfterUnlock.reveal=Revelar unidade
vaultOptions.general.actionAfterUnlock.ask=Perguntar vaultOptions.general.actionAfterUnlock.ask=Perguntar
@@ -417,6 +441,7 @@ recoveryKey.recover.resetSuccess.message=Palavra-passe redefinida com sucesso
recoveryKey.recover.resetSuccess.description=Você pode desbloquear o seu cofre com a nova senha. recoveryKey.recover.resetSuccess.description=Você pode desbloquear o seu cofre com a nova senha.
# Convert Vault # Convert Vault
convertVault.convert.convertBtn.processing=Convertendo…
# New Password # New Password
newPassword.promptText=Inserir uma nova palavra-passe newPassword.promptText=Inserir uma nova palavra-passe
@@ -439,4 +464,12 @@ quit.lockAndQuitBtn=Bloquear e Sair
# Forced Quit # Forced Quit
quit.forced.message=Alguns cofres não poderam ser fechados quit.forced.message=Alguns cofres não poderam ser fechados
quit.forced.description=Bloquear os cofres foi impossibilitado por operações pendentes ou ficheiros abertos. Poderá forçar o bloqueio dos cofres restantes, sob a possibilidade da perda de dados não guardados. quit.forced.description=Bloquear os cofres foi impossibilitado por operações pendentes ou ficheiros abertos. Poderá forçar o bloqueio dos cofres restantes, sob a possibilidade da perda de dados não guardados.
quit.forced.forceAndQuitBtn=Forçar e Sair quit.forced.forceAndQuitBtn=Forçar e Sair
# Update Reminder
updateReminder.title=Verificação de Atualização
updateReminder.message=Verificar atualizações?
updateReminder.description=Fique atualizado com novos recursos, correções de erros e melhorias de segurança. Recomendamos verificar automaticamente se há atualizações.
updateReminder.notNow=Agora não
updateReminder.yesOnce=Sim, Uma Vez
updateReminder.yesAutomatically=Sim, Automaticamente
@@ -10,16 +10,21 @@ generic.button.choose=Escolha…
generic.button.close=Fechar generic.button.close=Fechar
generic.button.copy=Copiar generic.button.copy=Copiar
generic.button.copied=Copiado! generic.button.copied=Copiado!
generic.button.done=Pronto generic.button.done=Concluído
generic.button.next=Próximo generic.button.next=Próximo
generic.button.print=Imprimir generic.button.print=Imprimir
# Error # Error
error.message=Erro %s error.message=Erro %s
error.description=Oops! Cryptomator não esperava que isso acontecesse. Você pode procurar soluções existentes para este erro. Ou se isso ainda não foi reportado como erro, fique à vontade para fazê-lo. error.description=O Cryptomator encontrou um erro inesperado. Você pode procurar soluções pré-existentes na internet ou até mesmo reportar como bug.
error.hyperlink.lookup=Procure este erro error.hyperlink.lookup=Procure este erro
error.hyperlink.report=Reportar este erro error.hyperlink.report=Reportar este erro
error.technicalDetails=Detalhes: error.technicalDetails=Detalhes:
error.existingSolutionDescription=O Cryptomator encontrou um erro inesperado, mas há uma solução pré-existente disponível no seguinte link.
error.hyperlink.solution=Procure a solução
error.lookupPermissionMessage=O Cryptomator pode procurar uma solução online. Isso enviará um pedido ao nosso banco de problemas a partir do seu endereço IP.
error.dismiss=Ignorar
error.lookUpSolution=Procurar solução
# Defaults # Defaults
defaults.vault.vaultName=Cofre defaults.vault.vaultName=Cofre
@@ -35,30 +40,33 @@ traymenu.vault.reveal=Exibir
# Add Vault Wizard # Add Vault Wizard
addvaultwizard.title=Adicionar Cofre addvaultwizard.title=Adicionar Cofre
## Welcome
addvaultwizard.welcome.newButton=Criar Um Novo Cofre
addvaultwizard.welcome.existingButton=Abrir Cofre Existente
## New ## New
### Name ### Name
addvaultwizard.new.nameInstruction=Escolha um nome para o cofre addvaultwizard.new.nameInstruction=Escolha um nome para o cofre
addvaultwizard.new.namePrompt=Nome do Cofre addvaultwizard.new.namePrompt=Nome do Cofre
### Location ### Location
addvaultwizard.new.locationInstruction=Onde o Cryptomator deve armazenar os arquivos encriptados do seu cofre? addvaultwizard.new.locationInstruction=Onde o Cryptomator deve armazenar os arquivos criptografados do seu cofre?
addvaultwizard.new.locationLabel=Local de armazenamento addvaultwizard.new.locationLabel=Local de armazenamento
addvaultwizard.new.locationPrompt= addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Local Personalizado addvaultwizard.new.directoryPickerLabel=Local Personalizado
addvaultwizard.new.directoryPickerButton=Escolher… addvaultwizard.new.directoryPickerButton=Escolher…
addvaultwizard.new.directoryPickerTitle=Selecionar Diretório addvaultwizard.new.directoryPickerTitle=Selecionar Diretório
addvaultwizard.new.fileAlreadyExists=Um arquivo ou diretório com o nome do cofre já existe addvaultwizard.new.fileAlreadyExists=Já existe um arquivo ou diretório com esse nome
addvaultwizard.new.locationDoesNotExist=Um diretório no caminho especificado não existe ou não pode ser acessado addvaultwizard.new.locationDoesNotExist=Um diretório no caminho especificado não existe ou não pode ser acessado
addvaultwizard.new.locationIsNotWritable=Sem acesso de escrita no caminho especificado addvaultwizard.new.locationIsNotWritable=Não há acesso de escrita nesse caminho
addvaultwizard.new.locationIsOk=Localização adequada para o seu cofre addvaultwizard.new.locationIsOk=Local adequado para o seu cofre
addvaultwizard.new.invalidName=Nome do cofre inválido addvaultwizard.new.invalidName=Nome do cofre inválido
addvaultwizard.new.validName=Nome do cofre válido addvaultwizard.new.validName=Nome do cofre válido
addvaultwizard.new.validCharacters.message=O nome do cofre pode conter os seguintes caracteres: addvaultwizard.new.validCharacters.message=O nome do cofre pode conter os seguintes caracteres:
addvaultwizard.new.validCharacters.chars=Caracteres de texto (exemplo: a, ж ou 수) addvaultwizard.new.validCharacters.chars=Caracteres de palavra (por exemplo, a, ж or 수)
addvaultwizard.new.validCharacters.numbers=Números addvaultwizard.new.validCharacters.numbers=Números
addvaultwizard.new.validCharacters.dashes=Hífen (%s) ou sublinhado (%s) addvaultwizard.new.validCharacters.dashes=Hífen (%s) ou sublinhado (%s)
### Expert Settings
addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Ativar configurações avançadas
addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Digite um valor entre 36 e 220 (padrão 220)
addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Abra a documentação para saber mais.
addvaultwizard.new.expertSettings.shorteningThreshold.title=Comprimento máximo dos nomes de arquivos criptografados
addvaultwizard.new.expertSettings.shorteningThreshold.valid=Válido
### Password ### Password
addvaultwizard.new.createVaultBtn=Criar Cofre addvaultwizard.new.createVaultBtn=Criar Cofre
addvaultwizard.new.generateRecoveryKeyChoice=Você não será capaz de acessar seus dados sem sua senha. Você quer uma chave de recuperação para o caso de perder sua senha? addvaultwizard.new.generateRecoveryKeyChoice=Você não será capaz de acessar seus dados sem sua senha. Você quer uma chave de recuperação para o caso de perder sua senha?
@@ -79,7 +87,7 @@ addvault.new.readme.storageLocation.10=Se precisar de ajuda, visite a documenta
addvault.new.readme.accessLocation.fileName=BEM-VINDO.rtf addvault.new.readme.accessLocation.fileName=BEM-VINDO.rtf
addvault.new.readme.accessLocation.1=🔐️ VOLUME ENCRIPTADO 🔐️ addvault.new.readme.accessLocation.1=🔐️ VOLUME ENCRIPTADO 🔐️
addvault.new.readme.accessLocation.2=Este é o local de acesso ao seu cofre. addvault.new.readme.accessLocation.2=Este é o local de acesso ao seu cofre.
addvault.new.readme.accessLocation.3=Todos os arquivos adicionados a este volume serão encriptados pelo Cryptomator. Você pode trabalhar nele tal como em qualquer outra unidade/pasta. Esta é apenas uma visão não encriptada do seu conteúdo, seus arquivos permanecem encriptados em seu disco rígido o tempo todo. addvault.new.readme.accessLocation.3=Todos os arquivos adicionados a este volume serão criptografados de forma transparente pelo Cryptomator. Você pode trabalhar nele como se fosse qualquer unidade/pasta. Esta é apenas uma visão não criptografada do seu conteúdo, mas seus arquivos permanecem criptografados na sua unidade o tempo todo.
addvault.new.readme.accessLocation.4=Fique à vontade para apagar este arquivo. addvault.new.readme.accessLocation.4=Fique à vontade para apagar este arquivo.
## Existing ## Existing
addvaultwizard.existing.instruction=Escolha o arquivo "vault.cryptomator" do seu cofre existente. Se existir apenas um arquivo chamado "masterkey.cryptomator", selecione outro. addvaultwizard.existing.instruction=Escolha o arquivo "vault.cryptomator" do seu cofre existente. Se existir apenas um arquivo chamado "masterkey.cryptomator", selecione outro.
@@ -110,12 +118,12 @@ forgetPassword.confirmBtn=Esquecer Senha
# Unlock # Unlock
unlock.title=Desbloquear "%s" unlock.title=Desbloquear "%s"
unlock.passwordPrompt=Digite a senha para "%s": unlock.passwordPrompt=Digite a senha para "%s":
unlock.savePassword=Lembrar senha unlock.savePassword=Lembrar Senha
unlock.unlockBtn=Desbloquear unlock.unlockBtn=Desbloquear
## Select ## Select
unlock.chooseMasterkey.message=Arquivo de chave mestra — “masterkey” — não encontrado unlock.chooseMasterkey.message=Arquivo "masterkey" não encontrado
unlock.chooseMasterkey.description=Não foi possível encontrar o arquivo Masterkey deste cofre no local esperado. Por favor selecione manualmente o arquivo contendo a chave. unlock.chooseMasterkey.description=Não encontrei o arquivo "masterkey" para o cofre "%s". Por favor selecione manualmente o arquivo contendo a chave.
unlock.chooseMasterkey.filePickerTitle=Selecionar Arquivo Masterkey unlock.chooseMasterkey.filePickerTitle=Selecionar arquivo "masterkey"
unlock.chooseMasterkey.filePickerMimeDesc=Chave mestra do Cryptomator unlock.chooseMasterkey.filePickerMimeDesc=Chave mestra do Cryptomator
## Success ## Success
unlock.success.message=Desbloqueado com sucesso unlock.success.message=Desbloqueado com sucesso
@@ -126,7 +134,11 @@ unlock.success.revealBtn=Revelar Volume
unlock.error.customPath.message=Não foi possível iniciar o cofre no caminho personalizado unlock.error.customPath.message=Não foi possível iniciar o cofre no caminho personalizado
unlock.error.customPath.description.notSupported=Se você deseja continuar usando o caminho personalizado, por favor vá para as preferências e selecione um tipo de volume que o suporte. Caso contrário, vá para as opções de cofre e escolha um ponto de montagem suportado. unlock.error.customPath.description.notSupported=Se você deseja continuar usando o caminho personalizado, por favor vá para as preferências e selecione um tipo de volume que o suporte. Caso contrário, vá para as opções de cofre e escolha um ponto de montagem suportado.
unlock.error.customPath.description.notExists=O caminho de montagem personalizado não existe. Crie o caminho em seu sistema de arquivos local, ou o altere nas opções de cofre. unlock.error.customPath.description.notExists=O caminho de montagem personalizado não existe. Crie o caminho em seu sistema de arquivos local, ou o altere nas opções de cofre.
unlock.error.customPath.description.generic=Você selecionou um caminho de montagem personalizado para este cofre, mas ao usá-lo ocorreu uma falha com a mensagem: %s unlock.error.customPath.description.inUse=A letra da unidade ou o caminho de montagem "%s" já está em uso.
unlock.error.customPath.description.hideawayNotDir=O arquivo oculto e temporário "%3$s" usado para desbloquear não pôde ser removido. Exclua-o manualmente.
unlock.error.customPath.description.couldNotBeCleaned=Seu cofre não pôde ser montado no caminho "%s". Tente novamente ou escolha um caminho diferente.
unlock.error.customPath.description.notEmptyDir=O caminho de montagem escolhido "%s" não é uma pasta vazia. Escolha uma pasta vazia e tente novamente.
unlock.error.customPath.description.generic=Você selecionou um caminho de montagem personalizado para este cofre, mas falhou com a mensagem: %2$s
## Hub ## Hub
hub.noKeychain.message=Não foi possível acessar a chave do dispositivo hub.noKeychain.message=Não foi possível acessar a chave do dispositivo
hub.noKeychain.description=Para desbloquear os cofres centrais, é necessário a chave do dispositivo, protegida por um chaveiro. Para proceder, ative "%s" e selecione um chaveiro nas preferências. hub.noKeychain.description=Para desbloquear os cofres centrais, é necessário a chave do dispositivo, protegida por um chaveiro. Para proceder, ative "%s" e selecione um chaveiro nas preferências.
@@ -199,8 +211,8 @@ migration.impossible.moreInfo=O cofre ainda pode ser aberto com uma versão mais
# Health Check # Health Check
## Start ## Start
health.title=Exame de saúde de "%s" health.title=Exame de saúde de "%s"
health.intro.header=Status de saúde health.intro.header=Verificação de Saúde
health.intro.text=O Health Check é uma coleção de verificações para detectar e possivelmente corrigir problemas na estrutura interna do seu cofre. Lembre-se de: health.intro.text=A Verificação de Saúde é um grupo de verificações que detectam e tentam corrigir problemas na estrutura interna do cofre. Lembre-se de:
health.intro.remarkSync=Certifique-se de que todos os dispositivos estejam completamente sincronizados, isso resolve a maioria dos problemas. health.intro.remarkSync=Certifique-se de que todos os dispositivos estejam completamente sincronizados, isso resolve a maioria dos problemas.
health.intro.remarkFix=Nem todos os problemas podem ser corrigidos. health.intro.remarkFix=Nem todos os problemas podem ser corrigidos.
health.intro.remarkBackup=Se os dados estiverem corrompidos, apenas um backup poderá ajudar. health.intro.remarkBackup=Se os dados estiverem corrompidos, apenas um backup poderá ajudar.
@@ -214,38 +226,38 @@ health.fail.moreInfo=Mais informações
health.checkList.description=Selecione as verificações na lista esquerda ou use os botões abaixo. health.checkList.description=Selecione as verificações na lista esquerda ou use os botões abaixo.
health.checkList.selectAllButton=Selecionar Todas as Verificações health.checkList.selectAllButton=Selecionar Todas as Verificações
health.checkList.deselectAllButton=Desfazer seleção de todas as planilhas health.checkList.deselectAllButton=Desfazer seleção de todas as planilhas
health.check.runBatchBtn=Executar as Verificações Selecionadas health.check.runBatchBtn=Executar Verificações
## Detail view ## Detail view
health.check.detail.noSelectedCheck=Para obter os resultados, selecione uma verificação de saúde completada na lista à esquerda. health.check.detail.noSelectedCheck=Para ver os resultados, selecione uma verificação na lista à esquerda.
health.check.detail.checkScheduled=A verificação está programada. health.check.detail.checkScheduled=A verificação está programada.
health.check.detail.checkRunning=A verificação está atualmente em execução… health.check.detail.checkRunning=A verificação está rodando…
health.check.detail.checkSkipped=A verificação não foi selecionada para ser executada. health.check.detail.checkSkipped=A verificação não foi selecionada para execução.
health.check.detail.checkFinished=A verificação foi concluída com sucesso. health.check.detail.checkFinished=A verificação terminou com sucesso.
health.check.detail.checkFinishedAndFound=A verificação terminou em execução. Por favor, reveja os resultados. health.check.detail.checkFinishedAndFound=A verificação terminou. Verifique os resultados.
health.check.detail.checkFailed=A verificação foi encerrada devido a um erro. health.check.detail.checkFailed=A verificação encerrou devido a um erro.
health.check.detail.checkCancelled=A verificação foi cancelada. health.check.detail.checkCancelled=A verificação foi cancelada.
health.check.detail.listFilters.label=Filtro health.check.detail.listFilters.label=Filtro
health.check.detail.fixAllSpecificBtn=Reparar todo tipo health.check.detail.fixAllSpecificBtn=Reparar todos deste tipo
health.check.exportBtn=Exportar Relatório health.check.exportBtn=Exportar Relatório
## Result view ## Result view
health.result.severityFilter.all=Severidade - Todos health.result.severityFilter.all=Gravidade - Todas
health.result.severityFilter.good=Bom health.result.severityFilter.good=Bom estado
health.result.severityFilter.info=Informação health.result.severityFilter.info=Info
health.result.severityFilter.warn=Aviso health.result.severityFilter.warn=Aviso
health.result.severityFilter.crit=Crítico health.result.severityFilter.crit=Crítico
health.result.severityTip.good=Gravidade: Boa\nestrutura do cofre normal. health.result.severityTip.good=Gravidade: Boa\nestrutura do cofre normal.
health.result.severityTip.info=Gravidade: Informação\nestrutura de cofre intacta, correção sugerida. health.result.severityTip.info=Gravidade: Info\nEstrutura de cofre intacta, correção sugerida.
health.result.severityTip.warn=Gravidade: Aviso\nestrutura de cofre corrompida, correção altamente aconselhável. health.result.severityTip.warn=Gravidade: Aviso\nEstrutura de cofre corrompida, correção altamente aconselhada.
health.result.severityTip.crit=Gravidade: Estrutura Crítica\ndo cofre corrompida, perda de dados determinada. health.result.severityTip.crit=Gravidade: Crítica\nEstrutura do cofre corrompida, haverá perda de dados.
health.result.fixStateFilter.all=Estado de reparo - Todos health.result.fixStateFilter.all=Estado de reparo - Todos
health.result.fixStateFilter.fixable=Corrigível health.result.fixStateFilter.fixable=Reparável
health.result.fixStateFilter.notFixable=Não corrigível health.result.fixStateFilter.notFixable=Não reparável
health.result.fixStateFilter.fixing=Corrigindo… health.result.fixStateFilter.fixing=Reparando…
health.result.fixStateFilter.fixed=Corrigido health.result.fixStateFilter.fixed=Reparado
health.result.fixStateFilter.fixFailed=Reparo falhou health.result.fixStateFilter.fixFailed=Reparo falhou
## Fix Application ## Fix Application
health.fix.fixBtn=Corrigir health.fix.fixBtn=Reparar
health.fix.successTip=Consertado com sucesso health.fix.successTip=Reparado
health.fix.failTip=Falha na correção, consulte o log para obter detalhes health.fix.failTip=Falha na correção, consulte o log para obter detalhes
# Preferences # Preferences
@@ -256,8 +268,8 @@ preferences.general.startHidden=Ocultar janela ao iniciar o Cryptomator
preferences.general.autoCloseVaults=Bloquear cofres abertos automaticamente ao sair do aplicativo preferences.general.autoCloseVaults=Bloquear cofres abertos automaticamente ao sair do aplicativo
preferences.general.debugLogging=Ativar log de debug preferences.general.debugLogging=Ativar log de debug
preferences.general.debugDirectory=Mostrar arquivos de log preferences.general.debugDirectory=Mostrar arquivos de log
preferences.general.autoStart=Iniciar o Cryptomator durante inicialização do sistema preferences.general.autoStart=Iniciar o Cryptomator ao inicializar o sistema
preferences.general.keychainBackend=Armazenar senhas no preferences.general.keychainBackend=Armazenar senhas com
## Interface ## Interface
preferences.interface=Interface preferences.interface=Interface
preferences.interface.theme=Aparência preferences.interface.theme=Aparência
@@ -314,27 +326,27 @@ stats.read.total.data.kib=Dados lidos: %.1f GiB
stats.read.total.data.mib=Dados lidos: %.1f MiB stats.read.total.data.mib=Dados lidos: %.1f MiB
stats.read.total.data.gib=Dados lidos: %.1f GiB stats.read.total.data.gib=Dados lidos: %.1f GiB
stats.decr.total.data.none=Dados descriptografados: - stats.decr.total.data.none=Dados descriptografados: -
stats.decr.total.data.kib=Dados descriptografados: %.1f GiB stats.decr.total.data.kib=Dados descriptografados: %.1f KiB
stats.decr.total.data.mib=Dados descriptografados: %.1f MiB stats.decr.total.data.mib=Dados descriptografados: %.1f MiB
stats.decr.total.data.gib=Dados descriptografados: %.1f GiB stats.decr.total.data.gib=Dados descriptografados: %.1f GiB
stats.read.accessCount=Total de leituras: %d stats.read.accessCount=Leituras totais: %d
## Write ## Write
stats.write.throughput.idle=Escrita: ociosa stats.write.throughput.idle=Gravação: ociosa
stats.write.throughput.kibs=Escrita: %.2f MiB/s stats.write.throughput.kibs=Gravação: %.2f KiB/s
stats.write.throughput.mibs=Escrita: %.2f MiB/s stats.write.throughput.mibs=Gravação: %.2f MiB/s
stats.write.total.data.none=Dados gravados: - stats.write.total.data.none=Dados gravados: -
stats.write.total.data.kib=Dados gravados: %.1f kiB stats.write.total.data.kib=Dados gravados: %.1f KiB
stats.write.total.data.mib=Dados gravados: %.1f MiB stats.write.total.data.mib=Dados gravados: %.1f MiB
stats.write.total.data.gib=Dados gravados: %.1f GiB stats.write.total.data.gib=Dados gravados: %.1f GiB
stats.encr.total.data.none=Dados criptografados: - stats.encr.total.data.none=Dados criptografados: -
stats.encr.total.data.kib=Dados encriptados: %.1f KiB stats.encr.total.data.kib=Dados criptografados: %.1f KiB
stats.encr.total.data.mib=Dados criptografados: %.1f MiB stats.encr.total.data.mib=Dados criptografados: %.1f MiB
stats.encr.total.data.gib=Dados criptografados: %.1f GiB stats.encr.total.data.gib=Dados criptografados: %.1f GiB
stats.write.accessCount=Total gravado: %d stats.write.accessCount=Gravações totais: %d
## Accesses ## Accesses
stats.access.current=Acesso: %d stats.access.current=Acesso: %d
stats.access.total=Total de acessos: %d stats.access.total=Acessos totais: %d
# Main Window # Main Window
@@ -342,7 +354,7 @@ main.closeBtn.tooltip=Fechar
main.minimizeBtn.tooltip=Minimizar main.minimizeBtn.tooltip=Minimizar
main.preferencesBtn.tooltip=Preferências main.preferencesBtn.tooltip=Preferências
main.debugModeEnabled.tooltip=Modo de depuração ativado main.debugModeEnabled.tooltip=Modo de depuração ativado
main.supporterCertificateMissing.tooltip=Por favor, considere doar para esse projeto main.supporterCertificateMissing.tooltip=Por favor doe
## Vault List ## Vault List
main.vaultlist.emptyList.onboardingInstruction=Clique aqui para adicionar um cofre main.vaultlist.emptyList.onboardingInstruction=Clique aqui para adicionar um cofre
main.vaultlist.contextMenu.remove=Remover… main.vaultlist.contextMenu.remove=Remover…
@@ -351,7 +363,7 @@ main.vaultlist.contextMenu.unlock=Desbloquear…
main.vaultlist.contextMenu.unlockNow=Desbloquear Agora main.vaultlist.contextMenu.unlockNow=Desbloquear Agora
main.vaultlist.contextMenu.vaultoptions=Exibir Opções de Cofre main.vaultlist.contextMenu.vaultoptions=Exibir Opções de Cofre
main.vaultlist.contextMenu.reveal=Revelar Volume main.vaultlist.contextMenu.reveal=Revelar Volume
main.vaultlist.addVaultBtn=Adicionar Cofre main.vaultlist.addVaultBtn=Adicionar
## Vault Detail ## Vault Detail
### Welcome ### Welcome
main.vaultDetail.welcomeOnboarding=Obrigado por escolher o Cryptomator para proteger seus arquivos. Se precisar de ajuda, confira nossos guias de introdução: main.vaultDetail.welcomeOnboarding=Obrigado por escolher o Cryptomator para proteger seus arquivos. Se precisar de ajuda, confira nossos guias de introdução:
@@ -368,19 +380,19 @@ main.vaultDetail.revealBtn=Revelar Volume
main.vaultDetail.copyUri=Copiar URI main.vaultDetail.copyUri=Copiar URI
main.vaultDetail.lockBtn=Bloquear main.vaultDetail.lockBtn=Bloquear
main.vaultDetail.bytesPerSecondRead=Leitura: main.vaultDetail.bytesPerSecondRead=Leitura:
main.vaultDetail.bytesPerSecondWritten=Escrita: main.vaultDetail.bytesPerSecondWritten=Gravação:
main.vaultDetail.throughput.idle=ocioso main.vaultDetail.throughput.idle=ocioso
main.vaultDetail.throughput.kbps=%.1f KiB/s main.vaultDetail.throughput.kbps=%.1f KiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s main.vaultDetail.throughput.mbps=%.1f MiB/s
main.vaultDetail.stats=Estatísticas do Cofre main.vaultDetail.stats=Estatísticas do Cofre
main.vaultDetail.locateEncryptedFileBtn=Localizar Arquivo Criptografado main.vaultDetail.locateEncryptedFileBtn=Localizar Arquivo Criptografado
main.vaultDetail.locateEncryptedFileBtn.tooltip=Escolha um arquivo do seu cofre para localizar sua versão criptografada main.vaultDetail.locateEncryptedFileBtn.tooltip=Escolha um arquivo do seu cofre para localizar sua versão criptografada
main.vaultDetail.encryptedPathsCopied=Caminhos copiados para área de transferência! main.vaultDetail.encryptedPathsCopied=Caminhos copiados para a Área de Transferência!
main.vaultDetail.filePickerTitle=Selecione o Arquivo No Cofre main.vaultDetail.filePickerTitle=Selecione o Arquivo No Cofre
### Missing ### Missing
main.vaultDetail.missing.info=O Cryptomator não conseguiu encontrar um cofre neste caminho. main.vaultDetail.missing.info=O Cryptomator não encontrou um cofre neste caminho.
main.vaultDetail.missing.recheck=Verificar novamente main.vaultDetail.missing.recheck=Verificar novamente
main.vaultDetail.missing.remove=Remover da lista de Cofres… main.vaultDetail.missing.remove=Remover da lista de cofres…
main.vaultDetail.missing.changeLocation=Alterar Localização do Cofre… main.vaultDetail.missing.changeLocation=Alterar Localização do Cofre…
### Needs Migration ### Needs Migration
main.vaultDetail.migrateButton=Atualizar Cofre main.vaultDetail.migrateButton=Atualizar Cofre
@@ -487,4 +499,12 @@ quit.lockAndQuitBtn=Bloquear e Sair
# Forced Quit # Forced Quit
quit.forced.message=Alguns cofres não puderam ser trancados quit.forced.message=Alguns cofres não puderam ser trancados
quit.forced.description=O bloqueio dos cofres foi impedido por operações pendentes ou arquivos abertos. Você pode forçar o bloqueio dos cofres restantes, no entanto, essa interrupção de E/S pode resultar na perda de dados não salvos nos cofres — “seus dados”. quit.forced.description=O bloqueio dos cofres foi impedido por operações pendentes ou arquivos abertos. Você pode forçar o bloqueio dos cofres restantes, no entanto, essa interrupção de E/S pode resultar na perda de dados não salvos nos cofres — “seus dados”.
quit.forced.forceAndQuitBtn=Forçar e Sair quit.forced.forceAndQuitBtn=Forçar e Sair
# Update Reminder
updateReminder.title=Verificação de Atualizações
updateReminder.message=Verificar Atualizações?
updateReminder.description=Mantenha-se atualizado com novos recursos, correções de bugs e melhoramentos de segurança. Recomendamos verificar atualizações automaticamente.
updateReminder.notNow=Agora Não
updateReminder.yesOnce=Sim, Uma Vez
updateReminder.yesAutomatically=Sim, Automaticamente

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