Compare commits

...
234 Commits
Author SHA1 Message Date
Sebastian Stenzel 88f83c5cdb Merge branch 'release/1.5.0-beta1' 2019-11-12 13:33:08 +01:00
Sebastian Stenzel c8059bef78 bumped version
[ci skip]
2019-11-12 13:32:51 +01:00
Sebastian Stenzel 638b731cf8 always set version to SNAPSHOT-{commit} for untagged CI builds 2019-11-12 13:23:05 +01:00
Sebastian Stenzel b2b6e304ed updated CI config 2019-11-12 13:13:58 +01:00
Sebastian Stenzel 0748709f40 Updated dependencies 2019-11-11 16:42:56 +01:00
Sebastian StenzelandGitHub d8ee446d37 New Crowdin translations (#987)
* New translations strings.properties
[ci skip]
2019-11-11 16:36:48 +01:00
Sebastian Stenzel 9932185ccc fixed typo
kudos to our translation team
[ci skip]
2019-10-31 22:10:37 +01:00
Sebastian Stenzel 77afd4688a ide settings
[ci skip]
2019-10-31 22:10:09 +01:00
Sebastian Stenzel 9a5ef3f6ff updated cryptofs to 1.9.0-rc1 2019-10-31 01:29:30 +01:00
Sebastian Stenzel c99f23a4c7 Merge branch 'support/1.4.x' into develop
# Conflicts:
#	main/buildkit/pom.xml
#	main/commons/pom.xml
#	main/keychain/pom.xml
#	main/launcher/pom.xml
#	main/pom.xml
#	main/ui/pom.xml
2019-10-31 01:11:02 +01:00
Sebastian Stenzel 274c3886f5 Merge branch 'hotfix/1.4.17' into support/1.4.x 2019-10-31 01:01:24 +01:00
Sebastian Stenzel 95db29158c fixes #997 2019-10-31 00:54:49 +01:00
Sebastian Stenzel 872680a737 updated dependencies, removed commons-io 2019-10-31 00:54:37 +01:00
Sebastian Stenzel 0ba12f6301 bumped version to 1.4.17 2019-10-31 00:54:09 +01:00
Armin Schrenk 248df9da51 TODOs 2019-10-23 14:23:53 +02:00
Armin Schrenk 702408d488 phrasing 2019-10-23 14:23:44 +02:00
Armin Schrenk dd1506f17a windows: fixing that already used drive letters are not shown as such in drop down menu 2019-10-23 13:07:41 +02:00
Sebastian Stenzel 7fb5c741ad get rid of some legacy code with too much if/else 2019-10-18 14:34:48 +02:00
Sebastian Stenzel aa61ab2b6e allow changing of user interface orientation via settings 2019-10-18 12:51:41 +02:00
Armin Schrenk 7a1e20d732 showing custom mountPath if selected 2019-10-16 16:58:50 +02:00
Armin Schrenk c1a5e187b6 localization 2019-10-16 16:49:21 +02:00
Armin Schrenk 57d3f788e6 further improving windows mount options 2019-10-16 16:41:28 +02:00
Armin Schrenk ca73c3ad90 Updating WinDriveLetters since Dokany be installed in version 1.3.x 2019-10-16 15:57:08 +02:00
Armin Schrenk aec367dcc7 adding TODO 2019-10-16 15:49:17 +02:00
Armin Schrenk 56e7c13cb1 including windows mount option for selecting mount point (without functionality) 2019-10-16 14:32:10 +02:00
Sebastian Stenzel 3b4f384bfd there shouldn't be a "."
[ci skip]
2019-10-14 10:51:16 +02:00
Sebastian Stenzel d1a20da7e0 Localization [ci skip] 2019-10-14 10:22:23 +02:00
Tobias HagemannandGitHub 4b3533f717 say my name [ci skip] 2019-10-14 00:31:49 +02:00
Sebastian Stenzel 6535adef44 Merge branch 'master' into develop 2019-10-13 15:42:09 +02:00
Sebastian Stenzel f69cde1469 Merge branch 'release/1.5.0-alpha2' 2019-10-13 15:41:27 +02:00
Sebastian Stenzel 59643b762f Preparing 1.5.0-alpha2 2019-10-13 15:36:52 +02:00
Sebastian Stenzel ec69c1411b Merge commit 'ad28d4510d8b99db02c1883f1061817b658f3407' into develop
# Conflicts:
#	main/ui/src/main/resources/i18n/strings_de.properties
2019-10-13 15:35:00 +02:00
Sebastian Stenzel ad28d4510d New translations strings.properties (German)
[ci skip]
2019-10-13 15:26:53 +02:00
Sebastian Stenzel 111e500928 only show migration's progressbar when there actually is any progress 2019-10-13 15:20:38 +02:00
Sebastian Stenzel b5cb129ff0 updated to lastest cryptofs beta 2019-10-13 14:46:25 +02:00
Sebastian Stenzel 8a1586e5e8 New translations strings.properties (Japanese)
[ci skip]
2019-10-12 08:15:37 +02:00
Sebastian Stenzel e1959211de New translations strings.properties (French)
[ci skip]
2019-10-11 22:50:43 +02:00
Sebastian Stenzel 53494fa141 New translations strings.properties (French)
[ci skip]
2019-10-11 22:08:38 +02:00
Sebastian Stenzel 7fdab3a2ab New translations strings.properties (French)
[ci skip]
2019-10-11 21:27:17 +02:00
Sebastian Stenzel cb749c2fba New translations strings.properties (French)
[ci skip]
2019-10-11 19:58:32 +02:00
Sebastian Stenzel 453efe9998 New translations strings.properties (French)
[ci skip]
2019-10-11 19:26:49 +02:00
Sebastian Stenzel 2948b78cbe showing the window shouldn't be a decision made by the vault list controller.
when opening a .cryptomator file, the handler for open file requests is responsible for showing the main window.
2019-10-11 15:48:28 +02:00
Sebastian Stenzel 5a9f993df8 updated cryptofs to fix a migration problem 2019-10-11 13:23:19 +02:00
Sebastian Stenzel 4936cc76d0 New translations strings.properties (Korean)
[ci skip]
2019-10-11 00:45:55 +02:00
Sebastian Stenzel 4a15467ff5 New translations strings.properties (Italian)
[ci skip]
2019-10-10 22:41:06 +02:00
Sebastian Stenzel bb09b32885 New translations strings.properties (French)
[ci skip]
2019-10-10 18:57:37 +02:00
Sebastian Stenzel 4c9372747c New translations strings.properties (Portuguese, Brazilian)
[ci skip]
2019-10-10 12:59:48 +02:00
Sebastian Stenzel 1c04c22617 New translations strings.properties (Japanese)
[ci skip]
2019-10-10 10:18:14 +02:00
Sebastian Stenzel 675146d20c New translations strings.properties (Japanese)
[ci skip]
2019-10-10 09:48:14 +02:00
Sebastian Stenzel 56ee6af9de New translations strings.properties (Russian)
[ci skip]
2019-10-10 08:32:02 +02:00
Sebastian Stenzel 926a0b3717 New translations strings.properties (Spanish)
[ci skip]
2019-10-10 06:26:05 +02:00
Sebastian Stenzel eae28ce76d New translations strings.properties (Spanish)
[ci skip]
2019-10-10 05:57:57 +02:00
Sebastian Stenzel 99c34539e6 New translations strings.properties (German)
[ci skip]
2019-10-09 21:28:50 +02:00
Sebastian Stenzel 0dfafdd874 New translations strings.properties (German)
[ci skip]
2019-10-09 21:02:41 +02:00
Sebastian Stenzel a8cb40831e New translations strings.properties (Dutch)
[ci skip]
2019-10-09 20:21:07 +02:00
Sebastian Stenzel 3b1bed9345 New translations strings.properties (Swedish)
[ci skip]
2019-10-09 19:29:01 +02:00
Sebastian Stenzel f18b81bdb7 New translations strings.properties (Spanish)
[ci skip]
2019-10-09 19:01:38 +02:00
Armin Schrenk 4a61fe372e enhancing error handling in storage location selection when creating a new vault 2019-10-09 18:24:23 +02:00
Sebastian Stenzel 0bd0543d10 New translations strings.properties (Russian)
[ci skip]
2019-10-09 17:49:00 +02:00
Sebastian Stenzel 06a3a04840 New translations strings.properties (Italian)
[ci skip]
2019-10-09 17:48:58 +02:00
Sebastian Stenzel 3eb379b1e9 New translations strings.properties (Swedish)
[ci skip]
2019-10-09 17:07:27 +02:00
Sebastian Stenzel 52e7707f81 New translations strings.properties (Greek)
[ci skip]
2019-10-09 17:07:25 +02:00
Sebastian Stenzel 28d2424cd5 New translations strings.properties (Japanese)
[ci skip]
2019-10-09 17:07:23 +02:00
Sebastian Stenzel 187e9f17fc New translations strings.properties (Korean)
[ci skip]
2019-10-09 17:07:22 +02:00
Sebastian Stenzel b9776a1017 New translations strings.properties (Croatian)
[ci skip]
2019-10-09 17:07:21 +02:00
Sebastian Stenzel 3fbf28eea9 New translations strings.properties (Portuguese)
[ci skip]
2019-10-09 17:07:19 +02:00
Sebastian Stenzel 99e7ec7dc2 New translations strings.properties (Turkish)
[ci skip]
2019-10-09 17:07:18 +02:00
Sebastian Stenzel a9b4512ce6 New translations strings.properties (Dutch)
[ci skip]
2019-10-09 17:07:16 +02:00
Sebastian Stenzel feb9ee238d New translations strings.properties (French)
[ci skip]
2019-10-09 17:07:14 +02:00
Sebastian Stenzel 748f7ca889 New translations strings.properties (Czech)
[ci skip]
2019-10-09 17:07:12 +02:00
Sebastian Stenzel 87a469f264 New translations strings.properties (Spanish)
[ci skip]
2019-10-09 17:07:11 +02:00
Sebastian Stenzel 59e0175d65 New translations strings.properties (Russian)
[ci skip]
2019-10-09 17:07:09 +02:00
Sebastian Stenzel 7595f5317d New translations strings.properties (Portuguese, Brazilian)
[ci skip]
2019-10-09 17:07:07 +02:00
Sebastian Stenzel 3ba4e87f1d New translations strings.properties (Italian)
[ci skip]
2019-10-09 17:07:06 +02:00
Sebastian Stenzel 0a7aec26cc New translations strings.properties (German)
[ci skip]
2019-10-09 17:07:04 +02:00
Armin Schrenk d70b7e12ef add TODO 2019-10-09 16:48:20 +02:00
Armin Schrenk 54d2591391 adding error screen for adding existing vault 2019-10-09 16:48:07 +02:00
Armin Schrenk 4f70695ceb reducing possible mistake when adding new controller to module 2019-10-09 16:45:50 +02:00
Sebastian Stenzel 8f0a151018 New translations strings.properties (Spanish)
[ci skip]
2019-10-09 16:24:33 +02:00
Sebastian Stenzel cd64460e62 added shake animation 2019-10-09 16:15:58 +02:00
Sebastian Stenzel db3c0622c6 New translations strings.properties (Swedish)
[ci skip]
2019-10-09 15:55:05 +02:00
Sebastian Stenzel ac0092b178 New translations strings.properties (Korean)
[ci skip]
2019-10-09 15:55:02 +02:00
Sebastian Stenzel fab32e9e93 New translations strings.properties (Russian)
[ci skip]
2019-10-09 15:55:00 +02:00
Sebastian Stenzel 3d1129b0f3 New translations strings.properties (Italian)
[ci skip]
2019-10-09 15:54:57 +02:00
Sebastian Stenzel 89b2ff74f3 New translations strings.properties (German)
[ci skip]
2019-10-09 15:54:54 +02:00
Sebastian Stenzel a43e8fc461 New translations strings.properties (Swedish)
[ci skip]
2019-10-09 15:21:38 +02:00
Sebastian Stenzel 98d3fddfcc New translations strings.properties (Greek)
[ci skip]
2019-10-09 15:21:36 +02:00
Sebastian Stenzel ff36fff091 New translations strings.properties (Japanese)
[ci skip]
2019-10-09 15:21:35 +02:00
Sebastian Stenzel 7d02108c8b New translations strings.properties (Korean)
[ci skip]
2019-10-09 15:21:33 +02:00
Sebastian Stenzel 593f37d5fe New translations strings.properties (Croatian)
[ci skip]
2019-10-09 15:21:32 +02:00
Sebastian Stenzel 7abe9c627b New translations strings.properties (Portuguese)
[ci skip]
2019-10-09 15:21:30 +02:00
Sebastian Stenzel a0923c3c9b New translations strings.properties (Turkish)
[ci skip]
2019-10-09 15:21:29 +02:00
Sebastian Stenzel 439042ab95 New translations strings.properties (Dutch)
[ci skip]
2019-10-09 15:21:28 +02:00
Sebastian Stenzel 113e505c52 New translations strings.properties (French)
[ci skip]
2019-10-09 15:21:26 +02:00
Sebastian Stenzel f01e0ae194 New translations strings.properties (Czech)
[ci skip]
2019-10-09 15:21:25 +02:00
Sebastian Stenzel 5540cef257 New translations strings.properties (Spanish)
[ci skip]
2019-10-09 15:21:23 +02:00
Sebastian Stenzel ab16ee493f New translations strings.properties (Russian)
[ci skip]
2019-10-09 15:21:21 +02:00
Sebastian Stenzel b1a1d1029c New translations strings.properties (Portuguese, Brazilian)
[ci skip]
2019-10-09 15:21:20 +02:00
Sebastian Stenzel a46b4aa768 New translations strings.properties (Italian)
[ci skip]
2019-10-09 15:21:18 +02:00
Sebastian Stenzel 245fe4b525 New translations strings.properties (German)
[ci skip]
2019-10-09 15:21:17 +02:00
Sebastian Stenzel c5a9926652 Added localizable labels to recovery key display window 2019-10-09 15:15:13 +02:00
Sebastian Stenzel 7032862a65 Added basic CSS for TextArea 2019-10-09 15:01:43 +02:00
Sebastian Stenzel 2012229c46 fixed tests 2019-10-09 14:14:38 +02:00
Sebastian Stenzel a6672ddbfc oxfordTop5000WordsSortedByLength.stream().filter(Pattern.compile("[a-z]{2,8}").asMatchPredicate()).distinct().limit(4096) 2019-10-09 14:04:28 +02:00
Sebastian Stenzel 8dd2147638 AppleScriptEngineFactory no longer exists since Java 9 (see https://bugs.openjdk.java.net/browse/JDK-8143404)
Formerly used in TrayIconUtil.java, which no longer exists either
2019-10-09 11:30:01 +02:00
Sebastian Stenzel 7a29a1b680 New translations strings.properties (Swedish)
[ci skip]
2019-10-09 08:48:14 +02:00
Sebastian Stenzel f4983f7862 New translations strings.properties (Spanish)
[ci skip]
2019-10-08 23:46:34 +02:00
Sebastian Stenzel 488bd1087a New translations strings.properties (German)
[ci skip]
2019-10-08 22:23:21 +02:00
Sebastian Stenzel d557136295 New translations strings.properties (Portuguese, Brazilian)
[ci skip]
2019-10-08 21:42:26 +02:00
Sebastian Stenzel 87f4b639a0 New translations strings.properties (Italian)
[ci skip]
2019-10-08 20:38:54 +02:00
Sebastian Stenzel dbb9379a2e New translations strings.properties (Swedish)
[ci skip]
2019-10-08 20:10:14 +02:00
Sebastian Stenzel fa86ae68ea Removed old 1.4.x localizations 2019-10-08 20:03:02 +02:00
Sebastian Stenzel f82fddc8fe Made recovery key creation a two-step wizard 2019-10-08 19:18:49 +02:00
Sebastian Stenzel e6f0b321cb New translations strings.properties (German)
[ci skip]
2019-10-08 18:36:38 +02:00
Sebastian Stenzel 41fef58450 New translations strings.properties (Dutch)
[ci skip]
2019-10-08 18:01:08 +02:00
Sebastian Stenzel 268026629d New translations strings.properties (Spanish)
[ci skip]
2019-10-08 18:01:07 +02:00
Sebastian Stenzel b95fa1868a New translations strings.properties (German)
[ci skip]
2019-10-08 18:01:06 +02:00
Sebastian Stenzel d2b7376e37 New translations strings.properties (Korean)
[ci skip]
2019-10-08 17:19:31 +02:00
Sebastian Stenzel 8d6eac63e2 New translations strings.properties (Turkish)
[ci skip]
2019-10-08 17:19:29 +02:00
Sebastian Stenzel b8fc2dcb64 New translations strings.properties (Russian)
[ci skip]
2019-10-08 17:19:27 +02:00
Sebastian Stenzel 671f934934 New translations strings.properties (Swedish)
[ci skip]
2019-10-08 16:28:17 +02:00
Sebastian Stenzel 58ff6554fc New translations strings.properties (Japanese)
[ci skip]
2019-10-08 16:28:14 +02:00
Sebastian Stenzel cad6b221d9 New translations strings.properties (Korean)
[ci skip]
2019-10-08 16:28:13 +02:00
Sebastian Stenzel c02d5a9794 New translations strings.properties (Turkish)
[ci skip]
2019-10-08 16:28:09 +02:00
Sebastian Stenzel aac71277e3 New translations strings.properties (Dutch)
[ci skip]
2019-10-08 16:28:07 +02:00
Sebastian Stenzel aa61be7bf5 New translations strings.properties (French)
[ci skip]
2019-10-08 16:28:05 +02:00
Sebastian Stenzel 3a4f796c79 New translations strings.properties (Czech)
[ci skip]
2019-10-08 16:28:04 +02:00
Sebastian Stenzel f070cdc12d New translations strings.properties (Spanish)
[ci skip]
2019-10-08 16:28:02 +02:00
Sebastian Stenzel e14911d4d5 New translations strings.properties (Russian)
[ci skip]
2019-10-08 16:28:00 +02:00
Sebastian Stenzel aa666ad025 New translations strings.properties (Portuguese, Brazilian)
[ci skip]
2019-10-08 16:27:59 +02:00
Sebastian Stenzel cd55c2666f New translations strings.properties (Italian)
[ci skip]
2019-10-08 16:27:57 +02:00
Sebastian Stenzel 0dc6032209 New translations strings.properties (German)
[ci skip]
2019-10-08 16:27:56 +02:00
Sebastian Stenzel f7630c28d6 Generate recovery key during vault creation 2019-10-08 16:26:57 +02:00
Sebastian Stenzel 08d9beb6b8 Externalized logic of recovery key creation to reusable utility class 2019-10-08 14:58:55 +02:00
Sebastian Stenzel 5808239416 Refactored shortcut handlers 2019-10-08 12:46:10 +02:00
Sebastian Stenzel e2f400340b added test for issue #979 2019-10-08 11:16:13 +02:00
Sebastian Stenzel 5854b24c44 updated badge link 2019-10-08 11:16:07 +02:00
Tobias Hagemann 7adaf44fb3 added progress bar 2019-10-08 01:06:50 +02:00
Sebastian Stenzel 0bd74056a0 New translations strings.properties (Swedish)
[ci skip]
2019-10-07 13:42:39 +02:00
Sebastian Stenzel bbeea7a2ee New translations strings.properties (Swedish)
[ci skip]
2019-10-06 17:55:46 +02:00
Sebastian Stenzel e3548737f1 New translations strings.properties (Russian)
[ci skip]
2019-10-06 17:55:44 +02:00
Sebastian Stenzel 75d7656824 New translations strings.properties (Swedish)
[ci skip]
2019-10-06 17:26:01 +02:00
Sebastian Stenzel c292f18915 New translations strings.properties (Russian)
[ci skip]
2019-10-06 17:25:59 +02:00
Sebastian Stenzel 9636e7c700 New translations strings.properties (Swedish)
[ci skip]
2019-10-06 16:56:15 +02:00
Sebastian Stenzel eb8f7840cc New translations strings.properties (Korean)
[ci skip]
2019-10-06 11:55:39 +02:00
Sebastian Stenzel 180d79f49e New translations strings.properties (Korean)
[ci skip]
2019-10-06 11:25:49 +02:00
Sebastian Stenzel 29cb1c96b1 New translations strings.properties (Swedish)
[ci skip]
2019-10-06 10:26:28 +02:00
Sebastian Stenzel f61432fc52 New translations strings.properties (French)
[ci skip]
2019-10-05 12:16:15 +02:00
Sebastian Stenzel 8e7dbf4640 New translations strings.properties (French)
[ci skip]
2019-10-05 11:50:53 +02:00
Sebastian Stenzel d2528faf3a New translations strings.properties (French)
[ci skip]
2019-10-05 10:07:47 +02:00
Sebastian Stenzel c1a3fe66ef New translations strings.properties (Japanese)
[ci skip]
2019-10-05 09:36:19 +02:00
Sebastian Stenzel ecb4c114a2 New translations strings.properties (French)
[ci skip]
2019-10-05 09:36:17 +02:00
Sebastian Stenzel 1ecaf5ae6e New translations strings.properties (Spanish)
[ci skip]
2019-10-05 00:55:54 +02:00
Sebastian Stenzel e88b7f00b3 New translations strings.properties (Spanish)
[ci skip]
2019-10-05 00:22:30 +02:00
Sebastian Stenzel 91aaabc7fb New translations strings.properties (French)
[ci skip]
2019-10-04 23:45:54 +02:00
Sebastian Stenzel 7414c29593 New translations strings.properties (French)
[ci skip]
2019-10-04 23:17:06 +02:00
Sebastian Stenzel 79ae5b7bff New translations strings.properties (French)
[ci skip]
2019-10-04 15:26:28 +02:00
Sebastian Stenzel 486a3a07f5 New translations strings.properties (Japanese)
[ci skip]
2019-10-04 14:50:00 +02:00
Sebastian Stenzel 02d44eb0e7 New translations strings.properties (Japanese)
[ci skip]
2019-10-04 13:56:22 +02:00
Sebastian Stenzel 3aff7bd956 New translations strings.properties (Japanese)
[ci skip]
2019-10-04 13:20:39 +02:00
Sebastian Stenzel cd6a6cc55a New translations strings.properties (Korean)
[ci skip]
2019-10-04 07:36:24 +02:00
Sebastian Stenzel d0a30a1779 New translations strings.properties (Korean)
[ci skip]
2019-10-04 03:26:03 +02:00
Sebastian Stenzel a5fb30d7c7 New translations strings.properties (Japanese)
[ci skip]
2019-10-04 01:55:05 +02:00
Sebastian Stenzel ba4e813a35 New translations strings.properties (French)
[ci skip]
2019-10-04 01:16:25 +02:00
Sebastian Stenzel f6d4caee07 New translations strings.properties (Japanese)
[ci skip]
2019-10-04 00:46:37 +02:00
Sebastian Stenzel d3a00e726f New translations strings.properties (French)
[ci skip]
2019-10-04 00:46:35 +02:00
Sebastian Stenzel d71c0695f4 New translations strings.properties (French)
[ci skip]
2019-10-04 00:19:26 +02:00
Sebastian Stenzel 394c91c50c New translations strings.properties (Czech)
[ci skip]
2019-10-03 18:06:06 +02:00
Sebastian Stenzel 71c35eaf4c New translations strings.properties (Greek)
[ci skip]
2019-10-03 15:44:58 +02:00
Sebastian Stenzel 70790d0e6a New translations strings.properties (Japanese)
[ci skip]
2019-10-03 14:08:44 +02:00
Sebastian Stenzel 8fbc00a417 New translations strings.properties (Japanese)
[ci skip]
2019-10-03 13:41:10 +02:00
Sebastian Stenzel 080bf7f540 New translations strings.properties (Japanese)
[ci skip]
2019-10-03 13:08:50 +02:00
Sebastian Stenzel 9d988294f3 New translations strings.properties (Czech)
[ci skip]
2019-10-03 12:30:27 +02:00
Sebastian Stenzel a712013507 New translations strings.properties (Czech)
[ci skip]
2019-10-03 12:00:54 +02:00
Sebastian Stenzel 0aab22975a New translations strings.properties (Czech)
[ci skip]
2019-10-03 11:25:33 +02:00
Sebastian Stenzel fde6555e4d New translations strings.properties (Czech)
[ci skip]
2019-10-03 10:55:07 +02:00
Sebastian Stenzel 748e76e187 New translations strings.properties (Czech)
[ci skip]
2019-10-03 10:24:17 +02:00
Sebastian Stenzel 55a627f718 New translations strings.properties (Czech)
[ci skip]
2019-10-03 08:58:08 +02:00
Sebastian Stenzel a19cbff12f New translations strings.properties (Czech)
[ci skip]
2019-10-03 08:27:39 +02:00
Sebastian Stenzel d5e098a6cd New translations strings.properties (Czech)
[ci skip]
2019-10-03 08:00:05 +02:00
Sebastian Stenzel 3f9fc28e3c New translations strings.properties (Spanish)
[ci skip]
2019-10-02 17:59:29 +02:00
Sebastian Stenzel 0bf4081d71 New translations strings.properties (Spanish)
[ci skip]
2019-10-02 17:29:19 +02:00
Sebastian Stenzel de3e392aa3 New translations strings.properties (Czech)
[ci skip]
2019-10-02 16:48:00 +02:00
Sebastian Stenzel 44a5f51c93 New translations strings.properties (Korean)
[ci skip]
2019-10-02 14:34:11 +02:00
Sebastian Stenzel 9c8ea3c2e5 New translations strings.properties (Croatian)
[ci skip]
2019-10-02 14:34:10 +02:00
Sebastian Stenzel 4208d1e036 New translations strings.properties (Portuguese)
[ci skip]
2019-10-02 14:34:08 +02:00
Sebastian Stenzel 154198fd5c New translations strings.properties (Turkish)
[ci skip]
2019-10-02 14:34:06 +02:00
Sebastian Stenzel 0ad0d79a54 New translations strings.properties (Dutch)
[ci skip]
2019-10-02 14:34:05 +02:00
Sebastian Stenzel 966538e47b New translations strings.properties (French)
[ci skip]
2019-10-02 14:34:03 +02:00
Sebastian Stenzel 181a1e7248 New translations strings.properties (Czech)
[ci skip]
2019-10-02 14:34:01 +02:00
Sebastian Stenzel 1a13e03a08 New translations strings.properties (Spanish)
[ci skip]
2019-10-02 14:33:59 +02:00
Sebastian Stenzel 0fa0568f24 New translations strings.properties (Russian)
[ci skip]
2019-10-02 14:33:58 +02:00
Sebastian Stenzel d7e76bee6d New translations strings.properties (Portuguese, Brazilian)
[ci skip]
2019-10-02 14:33:56 +02:00
Sebastian Stenzel 77dcf4da62 New translations strings.properties (Italian)
[ci skip]
2019-10-02 14:33:55 +02:00
Sebastian Stenzel 6eb0384fa6 New translations strings.properties (German)
[ci skip]
2019-10-02 14:33:54 +02:00
Armin Schrenk 5af5a6c5b0 enhancing fxml loading to add local specific stylesheets, for #754 2019-10-02 14:27:10 +02:00
Armin Schrenk 0e4c833be0 loaading dosis-bold font via @font-face in css 2019-10-02 13:39:38 +02:00
Sebastian Stenzel a2e4a2c78a New translations strings.properties (Korean)
[ci skip]
2019-10-02 13:07:55 +02:00
Sebastian Stenzel f4ab2b590f New translations strings.properties (Korean)
[ci skip]
2019-10-02 12:32:27 +02:00
Sebastian Stenzel 80b3d7ab6b New translations strings.properties (Korean)
[ci skip]
2019-10-02 10:54:40 +02:00
Sebastian Stenzel b23fbd4507 New translations strings.properties (Korean)
[ci skip]
2019-10-02 10:29:20 +02:00
Sebastian Stenzel 5b56ff6d55 New translations strings.properties (Korean)
[ci skip]
2019-10-02 09:58:16 +02:00
Sebastian Stenzel 143b691c61 New translations strings.properties (Korean)
[ci skip]
2019-10-02 09:31:50 +02:00
Sebastian Stenzel 88e4c88a87 New translations strings.properties (Croatian)
[ci skip]
2019-10-01 22:37:58 +02:00
Sebastian Stenzel c9e06ad2d2 New translations strings.properties (Turkish)
[ci skip]
2019-10-01 22:07:35 +02:00
Sebastian Stenzel bd814f729d New translations strings.properties (Italian)
[ci skip]
2019-10-01 22:07:33 +02:00
Sebastian Stenzel 8c8b50b83a New translations strings.properties (Portuguese)
[ci skip]
2019-10-01 21:39:03 +02:00
Sebastian Stenzel e9f4790b40 New translations strings.properties (Turkish)
[ci skip]
2019-10-01 21:39:01 +02:00
Sebastian Stenzel ac1149b873 New translations strings.properties (Dutch)
[ci skip]
2019-10-01 21:39:00 +02:00
Sebastian Stenzel 51b6f828ed New translations strings.properties (Italian)
[ci skip]
2019-10-01 21:38:59 +02:00
Sebastian Stenzel b97a99d4e2 New translations strings.properties (Turkish)
[ci skip]
2019-10-01 21:09:42 +02:00
Sebastian Stenzel 6ed661aa13 New translations strings.properties (Dutch)
[ci skip]
2019-10-01 20:44:03 +02:00
Sebastian Stenzel f3d46ed767 New translations strings.properties (Italian)
[ci skip]
2019-10-01 20:44:02 +02:00
Sebastian Stenzel 3bde55c4df New translations strings.properties (Dutch)
[ci skip]
2019-10-01 20:08:57 +02:00
Sebastian Stenzel dd591ec258 New translations strings.properties (Spanish)
[ci skip]
2019-10-01 20:08:56 +02:00
Sebastian Stenzel 4ce035b554 New translations strings.properties (French)
[ci skip]
2019-10-01 18:38:52 +02:00
Sebastian Stenzel cdc451fdca New translations strings.properties (Czech)
[ci skip]
2019-10-01 18:38:50 +02:00
Sebastian Stenzel 0680d16708 New translations strings.properties (Italian)
[ci skip]
2019-10-01 18:09:13 +02:00
Sebastian Stenzel 1f1792522e New translations strings.properties (German)
[ci skip]
2019-10-01 18:09:12 +02:00
Sebastian Stenzel db53a7a3dc New translations strings.properties (Russian)
[ci skip]
2019-10-01 17:18:13 +02:00
Sebastian Stenzel 9362196d4c New translations strings.properties (Spanish)
[ci skip]
2019-10-01 16:51:17 +02:00
Sebastian Stenzel 527d387640 New translations strings.properties (Russian)
[ci skip]
2019-10-01 16:51:16 +02:00
Sebastian Stenzel 5f9dda4bbb New translations strings.properties (Portuguese, Brazilian)
[ci skip]
2019-10-01 16:51:14 +02:00
Sebastian Stenzel 6a991f3ab5 New translations strings.properties (Italian)
[ci skip]
2019-10-01 16:51:13 +02:00
Sebastian Stenzel 4c023f792c New translations strings.properties (German)
[ci skip]
2019-10-01 15:27:40 +02:00
Sebastian Stenzel 6b5f7d37ca more crowdin fine tuning
[ci skip]
2019-10-01 15:26:18 +02:00
Sebastian Stenzel 87158b1e7a Update Crowdin configuration file 2019-10-01 13:53:37 +02:00
Sebastian Stenzel 0b132b7d10 updaten OpenJFX to version 13 2019-10-01 13:04:44 +02:00
Sebastian Stenzel cd4cb70896 show progress during vault migration (ugly prototype) 2019-09-27 21:44:24 +02:00
Sebastian Stenzel 633470b0d6 reduced visibility of scope annotation 2019-09-27 21:43:56 +02:00
Sebastian Stenzel 1930090044 Added first prototyp for recovery key generation 2019-09-27 21:43:42 +02:00
Sebastian Stenzel ccefb3613e renamed file 2019-09-27 20:01:02 +02:00
Sebastian Stenzel 9e79350b9e added the strongest avenger 😜
[ci skip]
2019-09-27 10:56:44 +02:00
Sebastian Stenzel 9092c2325a Merge branch 'master' into develop 2019-09-19 11:23:58 +02:00
125 changed files with 8006 additions and 8520 deletions
+5
View File
@@ -0,0 +1,5 @@
commit_message: "[ci skip]"
escape_special_characters: 0
files:
- source: /main/ui/src/main/resources/i18n/strings.properties
translation: /main/ui/src/main/resources/i18n/strings_%two_letters_code%.properties
+1 -1
View File
@@ -1,6 +1,6 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
github: [overheadhunter, tobihagemann] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
+19 -11
View File
@@ -7,26 +7,34 @@
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<processorPath useClasspath="false">
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-compiler/2.22.1/dagger-compiler-2.22.1.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger/2.22.1/dagger-2.22.1.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-compiler/2.25.2/dagger-compiler-2.25.2.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger/2.25.2/dagger-2.25.2.jar" />
<entry name="$MAVEN_REPOSITORY$/javax/inject/javax.inject/1/javax.inject-1.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-producers/2.22.1/dagger-producers-2.22.1.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/guava/guava/25.0-jre/guava-25.0-jre.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar" />
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.3/checker-compat-qual-2.5.3.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.1.3/error_prone_annotations-2.1.3.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-producers/2.25.2/dagger-producers-2.25.2.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" />
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" />
<entry name="$MAVEN_REPOSITORY$/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-spi/2.22.1/dagger-spi-2.22.1.jar" />
<entry name="$MAVEN_REPOSITORY$/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" />
<entry name="$MAVEN_REPOSITORY$/org/checkerframework/checker-compat-qual/2.5.3/checker-compat-qual-2.5.3.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/dagger/dagger-spi/2.25.2/dagger-spi-2.25.2.jar" />
<entry name="$MAVEN_REPOSITORY$/com/squareup/javapoet/1.11.1/javapoet-1.11.1.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/googlejavaformat/google-java-format/1.5/google-java-format-1.5.jar" />
<entry name="$MAVEN_REPOSITORY$/com/google/errorprone/javac-shaded/9-dev-r4023-3/javac-shaded-9-dev-r4023-3.jar" />
<entry name="$MAVEN_REPOSITORY$/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" />
<entry name="$MAVEN_REPOSITORY$/net/ltgt/gradle/incap/incap/0.2/incap-0.2.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.3.50/kotlin-stdlib-1.3.50.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.50/kotlin-stdlib-common-1.3.50.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar" />
<entry name="$MAVEN_REPOSITORY$/org/jetbrains/kotlinx/kotlinx-metadata-jvm/0.1.0/kotlinx-metadata-jvm-0.1.0.jar" />
</processorPath>
<module name="keychain" />
<module name="launcher" />
<module name="commons" />
<module name="keychain" />
<module name="ui" />
<module name="launcher" />
</profile>
</annotationProcessing>
</component>
+11 -10
View File
@@ -1,4 +1,4 @@
dist: xenial
dist: bionic
language: java
sudo: false
jdk:
@@ -17,24 +17,25 @@ addons:
- haveged
install:
- curl -o $HOME/.m2/settings.xml https://gist.githubusercontent.com/cryptobot/cf5fbd909c4782aaeeeb7c7f4a1a43da/raw/e60ee486e34ee0c79f89f947abe2c83b4290c6bb/settings.xml
- mvn -fmain/pom.xml clean install -DskipTests org.codehaus.mojo:versions-maven-plugin:help dependency:go-offline -Pcoverage,release # "clean install" needed until we can exclude artifacts currently in the reactor, see https://maven.apache.org/plugins/maven-dependency-plugin/go-offline-mojo.html#excludeReactor and https://issues.apache.org/jira/browse/MDEP-568
- mvn -fmain/pom.xml clean install -DskipTests -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN org.codehaus.mojo:versions-maven-plugin:help dependency:go-offline -Pcoverage,release # "clean install" needed until we can exclude artifacts currently in the reactor, see https://maven.apache.org/plugins/maven-dependency-plugin/go-offline-mojo.html#excludeReactor and https://issues.apache.org/jira/browse/MDEP-568
before_script:
- |
if [[ -n "$TRAVIS_TAG" ]]; then
mvn -fmain/pom.xml org.codehaus.mojo:versions-maven-plugin:set -DnewVersion=$TRAVIS_TAG
else
mvn -fmain/pom.xml org.codehaus.mojo:versions-maven-plugin:set -DnewVersion=SNAPSHOT-$(echo $TRAVIS_COMMIT | head -c7)
fi
script:
- mvn --update-snapshots -fmain/pom.xml clean test verify -Pcoverage
after_success:
- curl -o ~/codacy-coverage-reporter.jar https://oss.sonatype.org/service/local/repositories/releases/content/com/codacy/codacy-coverage-reporter/4.0.2/codacy-coverage-reporter-4.0.2-assembly.jar
- curl -o ~/codacy-coverage-reporter.jar https://oss.sonatype.org/service/local/repositories/releases/content/com/codacy/codacy-coverage-reporter/6.0.7/codacy-coverage-reporter-6.0.7-assembly.jar
- $JAVA_HOME/bin/java -jar ~/codacy-coverage-reporter.jar report -l Java -r main/commons/target/site/jacoco/jacoco.xml --partial
- $JAVA_HOME/bin/java -jar ~/codacy-coverage-reporter.jar report -l Java -r main/keychain/target/site/jacoco/jacoco.xml --partial
- $JAVA_HOME/bin/java -jar ~/codacy-coverage-reporter.jar report -l Java -r main/ui/target/site/jacoco/jacoco.xml --partial
- $JAVA_HOME/bin/java -jar ~/codacy-coverage-reporter.jar report -l Java -r main/launcher/target/site/jacoco/jacoco.xml --partial
- $JAVA_HOME/bin/java -jar ~/codacy-coverage-reporter.jar final
before_deploy:
- |
if [[ -n "$TRAVIS_TAG" ]]; then
mvn -fmain/pom.xml org.codehaus.mojo:versions-maven-plugin:set -DnewVersion=$TRAVIS_TAG
elif [[ $TRAVIS_BRANCH == "develop" ]] && [[ $TRAVIS_PULL_REQUEST == "false" ]]; then
mvn -fmain/pom.xml org.codehaus.mojo:versions-maven-plugin:set -DnewVersion=SNAPSHOT-$(echo $TRAVIS_COMMIT | head -c7)
fi
- mvn -fmain/pom.xml clean package -Prelease -DskipTests
- mvn -fmain/pom.xml package -Prelease -DskipTests
- export TODAY=`date +'%Y-%m-%d'`; envsubst '$TRAVIS_TAG $TODAY' < .travis-deploy-release.tmpl.json > .travis-deploy-release.json
deploy:
- provider: bintray # SNAPSHOTS
+1 -1
View File
@@ -4,7 +4,7 @@
[![Known Vulnerabilities](https://snyk.io/test/github/cryptomator/cryptomator/badge.svg?targetFile=main%2Fpom.xml)](https://snyk.io/test/github/cryptomator/cryptomator?targetFile=main%2Fpom.xml)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/2a0adf3cec6a4143b91035d3924178f1)](https://www.codacy.com/app/cryptomator/cryptomator?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=cryptomator/cryptomator&amp;utm_campaign=Badge_Grade)
[![Twitter](https://img.shields.io/badge/twitter-@Cryptomator-blue.svg?style=flat)](http://twitter.com/Cryptomator)
[![POEditor](https://img.shields.io/badge/POEditor-Help%20Translate-blue.svg?style=flat)](https://poeditor.com/join/project/bHwbvJmx0E)
[![Crowdin](https://badges.crowdin.net/cryptomator/localized.svg)](https://translate.cryptomator.org/)
[![Latest Release](https://img.shields.io/github/release/cryptomator/cryptomator.svg)](https://github.com/cryptomator/cryptomator/releases/latest)
[![Community](https://img.shields.io/badge/help-Community-orange.svg)](https://community.cryptomator.org)
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<groupId>org.cryptomator</groupId>
<artifactId>main</artifactId>
<version>1.5.0-alpha1</version>
<version>1.5.0-beta1</version>
</parent>
<artifactId>buildkit</artifactId>
<packaging>pom</packaging>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<groupId>org.cryptomator</groupId>
<artifactId>main</artifactId>
<version>1.5.0-alpha1</version>
<version>1.5.0-beta1</version>
</parent>
<artifactId>commons</artifactId>
<name>Cryptomator Commons</name>
@@ -17,6 +17,7 @@ import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.NodeOrientation;
import java.util.function.Consumer;
@@ -30,9 +31,10 @@ public class Settings {
public static final int DEFAULT_PORT = 42427;
public static final int DEFAULT_NUM_TRAY_NOTIFICATIONS = 3;
public static final WebDavUrlScheme DEFAULT_GVFS_SCHEME = WebDavUrlScheme.DAV;
public static final UiTheme DEFAULT_THEME = UiTheme.LIGHT;
public static final boolean DEFAULT_DEBUG_MODE = false;
public static final VolumeImpl DEFAULT_PREFERRED_VOLUME_IMPL = System.getProperty("os.name").toLowerCase().contains("windows") ? VolumeImpl.DOKANY : VolumeImpl.FUSE;
public static final UiTheme DEFAULT_THEME = UiTheme.LIGHT;
public static final NodeOrientation DEFAULT_USER_INTERFACE_ORIENTATION = NodeOrientation.LEFT_TO_RIGHT;
private final ObservableList<VaultSettings> directories = FXCollections.observableArrayList(VaultSettings::observables);
private final BooleanProperty askedForUpdateCheck = new SimpleBooleanProperty(DEFAULT_ASKED_FOR_UPDATE_CHECK);
@@ -44,6 +46,7 @@ public class Settings {
private final BooleanProperty debugMode = new SimpleBooleanProperty(DEFAULT_DEBUG_MODE);
private final ObjectProperty<VolumeImpl> preferredVolumeImpl = new SimpleObjectProperty<>(DEFAULT_PREFERRED_VOLUME_IMPL);
private final ObjectProperty<UiTheme> theme = new SimpleObjectProperty<>(DEFAULT_THEME);
private final ObjectProperty<NodeOrientation> userInterfaceOrientation = new SimpleObjectProperty<>(DEFAULT_USER_INTERFACE_ORIENTATION);
private Consumer<Settings> saveCmd;
@@ -61,6 +64,7 @@ public class Settings {
debugMode.addListener(this::somethingChanged);
preferredVolumeImpl.addListener(this::somethingChanged);
theme.addListener(this::somethingChanged);
userInterfaceOrientation.addListener(this::somethingChanged);
}
void setSaveCmd(Consumer<Settings> saveCmd) {
@@ -118,4 +122,8 @@ public class Settings {
public ObjectProperty<UiTheme> theme() {
return theme;
}
public ObjectProperty<NodeOrientation> userInterfaceOrientation() {
return userInterfaceOrientation;
}
}
@@ -9,6 +9,7 @@ import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
import javafx.geometry.NodeOrientation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,6 +37,7 @@ public class SettingsJsonAdapter extends TypeAdapter<Settings> {
out.name("debugMode").value(value.debugMode().get());
out.name("preferredVolumeImpl").value(value.preferredVolumeImpl().get().name());
out.name("theme").value(value.theme().get().name());
out.name("uiOrientation").value(value.userInterfaceOrientation().get().name());
out.endObject();
}
@@ -85,6 +87,9 @@ public class SettingsJsonAdapter extends TypeAdapter<Settings> {
case "theme":
settings.theme().set(parseUiTheme(in.nextString()));
break;
case "uiOrientation":
settings.userInterfaceOrientation().set(parseUiOrientation(in.nextString()));
break;
default:
LOG.warn("Unsupported vault setting found in JSON: " + name);
in.skipValue();
@@ -109,7 +114,7 @@ public class SettingsJsonAdapter extends TypeAdapter<Settings> {
try {
return WebDavUrlScheme.valueOf(webDavUrlSchemeName.toUpperCase());
} catch (IllegalArgumentException e) {
LOG.warn("Invalid volume type {}. Defaulting to {}.", webDavUrlSchemeName, Settings.DEFAULT_GVFS_SCHEME);
LOG.warn("Invalid WebDAV url scheme {}. Defaulting to {}.", webDavUrlSchemeName, Settings.DEFAULT_GVFS_SCHEME);
return Settings.DEFAULT_GVFS_SCHEME;
}
}
@@ -118,11 +123,20 @@ public class SettingsJsonAdapter extends TypeAdapter<Settings> {
try {
return UiTheme.valueOf(uiThemeName.toUpperCase());
} catch (IllegalArgumentException e) {
LOG.warn("Invalid volume type {}. Defaulting to {}.", uiThemeName, Settings.DEFAULT_THEME);
LOG.warn("Invalid ui theme {}. Defaulting to {}.", uiThemeName, Settings.DEFAULT_THEME);
return Settings.DEFAULT_THEME;
}
}
private NodeOrientation parseUiOrientation(String uiOrientationName) {
try {
return NodeOrientation.valueOf(uiOrientationName.toUpperCase());
} catch (IllegalArgumentException e) {
LOG.warn("Invalid ui orientation {}. Defaulting to {}.", uiOrientationName, Settings.DEFAULT_USER_INTERFACE_ORIENTATION);
return Settings.DEFAULT_USER_INTERFACE_ORIENTATION;
}
}
private List<VaultSettings> readVaultSettingsArray(JsonReader in) throws IOException {
List<VaultSettings> result = new ArrayList<>();
in.beginArray();
@@ -69,8 +69,9 @@ public class DokanyVolume implements Volume {
} else {
//auto assign drive letter
if (!windowsDriveLetters.getAvailableDriveLetters().isEmpty()) {
return windowsDriveLetters.getAvailableDriveLetters().iterator().next();
return Path.of(windowsDriveLetters.getAvailableDriveLetters().iterator().next() + ":\\");
} else {
//TODO: Error Handling
throw new VolumeException("No free drive letter available.");
}
}
@@ -5,6 +5,7 @@
*******************************************************************************/
package org.cryptomator.common.vaults;
import com.google.common.collect.Sets;
import org.apache.commons.lang3.SystemUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -14,7 +15,6 @@ import javax.inject.Singleton;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.StreamSupport;
@@ -23,11 +23,11 @@ import java.util.stream.StreamSupport;
public final class WindowsDriveLetters {
private static final Logger LOG = LoggerFactory.getLogger(WindowsDriveLetters.class);
private static final Set<Path> D_TO_Z;
private static final Set<String> A_TO_Z;
static {
try (IntStream stream = IntStream.rangeClosed('D', 'Z')) {
D_TO_Z = stream.mapToObj(i -> Path.of(((char) i)+":\\")).collect(Collectors.toSet());
try (IntStream stream = IntStream.rangeClosed('A', 'Z')) {
A_TO_Z = stream.mapToObj(i -> String.valueOf((char) i)).collect(Collectors.toSet());
}
}
@@ -35,20 +35,22 @@ public final class WindowsDriveLetters {
public WindowsDriveLetters() {
}
public Set<Path> getOccupiedDriveLetters() {
public Set<String> getAllDriveLetters() {
return A_TO_Z;
}
public Set<String> getOccupiedDriveLetters() {
if (!SystemUtils.IS_OS_WINDOWS) {
LOG.warn("Attempted to get occupied drive letters on non-Windows machine.");
return Set.of();
} else {
Iterable<Path> rootDirs = FileSystems.getDefault().getRootDirectories();
return StreamSupport.stream(rootDirs.spliterator(), false).collect(Collectors.toSet());
return StreamSupport.stream(rootDirs.spliterator(), false).map(p -> p.toString().substring(0,1)).collect(Collectors.toSet());
}
}
public Set<Path> getAvailableDriveLetters() {
Set<Path> occupiedDriveLetters = getOccupiedDriveLetters();
Predicate<Path> isOccupiedDriveLetter = occupiedDriveLetters::contains;
return D_TO_Z.stream().filter(isOccupiedDriveLetter.negate()).collect(Collectors.toSet());
public Set<String> getAvailableDriveLetters() {
return Sets.difference(A_TO_Z, getOccupiedDriveLetters());
}
}
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<groupId>org.cryptomator</groupId>
<artifactId>main</artifactId>
<version>1.5.0-alpha1</version>
<version>1.5.0-beta1</version>
</parent>
<artifactId>keychain</artifactId>
<name>System Keychain Access</name>
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<groupId>org.cryptomator</groupId>
<artifactId>main</artifactId>
<version>1.5.0-alpha1</version>
<version>1.5.0-beta1</version>
</parent>
<artifactId>launcher</artifactId>
<name>Cryptomator Launcher</name>
+16 -28
View File
@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.cryptomator</groupId>
<artifactId>main</artifactId>
<version>1.5.0-alpha1</version>
<version>1.5.0-beta1</version>
<packaging>pom</packaging>
<name>Cryptomator</name>
@@ -24,30 +24,28 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- dependency versions -->
<cryptomator.cryptolib.version>1.2.2</cryptomator.cryptolib.version>
<cryptomator.cryptofs.version>1.9.0-beta1</cryptomator.cryptofs.version>
<cryptomator.cryptofs.version>1.9.0-rc2</cryptomator.cryptofs.version>
<cryptomator.jni.version>2.2.1</cryptomator.jni.version>
<cryptomator.fuse.version>1.2.0</cryptomator.fuse.version>
<cryptomator.fuse.version>1.2.1</cryptomator.fuse.version>
<cryptomator.dokany.version>1.1.11</cryptomator.dokany.version>
<cryptomator.webdav.version>1.0.10</cryptomator.webdav.version>
<javafx.version>12</javafx.version>
<javafx.version>13.0.1</javafx.version>
<commons-io.version>2.6</commons-io.version>
<commons-lang3.version>3.8.1</commons-lang3.version>
<commons-lang3.version>3.9</commons-lang3.version>
<easybind.version>1.0.3</easybind.version>
<guava.version>27.1-jre</guava.version>
<dagger.version>2.22.1</dagger.version>
<gson.version>2.8.5</gson.version>
<guava.version>28.1-jre</guava.version>
<dagger.version>2.25.2</dagger.version>
<gson.version>2.8.6</gson.version>
<slf4j.version>1.7.26</slf4j.version>
<slf4j.version>1.7.29</slf4j.version>
<logback.version>1.2.3</logback.version>
<junit.jupiter.version>5.4.2</junit.jupiter.version>
<mockito.version>2.27.0</mockito.version>
<hamcrest.version>2.1</hamcrest.version>
<junit.jupiter.version>5.5.2</junit.jupiter.version>
<mockito.version>3.1.0</mockito.version>
<hamcrest.version>2.2</hamcrest.version>
</properties>
<repositories>
@@ -82,11 +80,6 @@
</dependency>
<!-- Cryptomator Libs -->
<dependency>
<groupId>org.cryptomator</groupId>
<artifactId>cryptolib</artifactId>
<version>${cryptomator.cryptolib.version}</version>
</dependency>
<dependency>
<groupId>org.cryptomator</groupId>
<artifactId>cryptofs</artifactId>
@@ -158,11 +151,6 @@
</dependency>
<!-- Apache Commons -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
@@ -273,7 +261,7 @@
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.0</version>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-libs</id>
@@ -302,7 +290,7 @@
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.2</version>
<version>0.8.5</version>
<executions>
<execution>
<id>prepare-agent</id>
@@ -329,7 +317,7 @@
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<version>3.8.1</version>
<configuration>
<release>11</release>
<annotationProcessorPaths>
@@ -344,7 +332,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<version>2.22.2</version>
</plugin>
</plugins>
</build>
+1 -9
View File
@@ -4,7 +4,7 @@
<parent>
<groupId>org.cryptomator</groupId>
<artifactId>main</artifactId>
<version>1.5.0-alpha1</version>
<version>1.5.0-beta1</version>
</parent>
<artifactId>ui</artifactId>
<name>Cryptomator GUI</name>
@@ -22,10 +22,6 @@
<groupId>org.cryptomator</groupId>
<artifactId>jni</artifactId>
</dependency>
<dependency>
<groupId>org.cryptomator</groupId>
<artifactId>cryptolib</artifactId>
</dependency>
<!-- JavaFx -->
<dependency>
@@ -54,10 +50,6 @@
</dependency>
<!-- Apache Commons -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
@@ -0,0 +1,51 @@
package org.cryptomator.ui.addvaultwizard;
import dagger.Lazy;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.StringBinding;
import javafx.beans.property.ObjectProperty;
import javafx.fxml.FXML;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxmlFile;
import org.cryptomator.ui.common.FxmlScene;
import javax.inject.Inject;
import java.nio.file.Path;
@AddVaultWizardScoped
public class AddVaultFailureExisitingController implements FxController {
private final Stage window;
private final Lazy<Scene> previousScene;
private final StringBinding vaultName;
@Inject
AddVaultFailureExisitingController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_EXISTING) Lazy<Scene> previousScene, ObjectProperty<Path> pathOfFailedVault){
this.window = window;
this.previousScene = previousScene;
this.vaultName = Bindings.createStringBinding(() -> pathOfFailedVault.get().getFileName().toString(),pathOfFailedVault);
}
@FXML
public void close(){
window.close();
}
@FXML
public void back(){
window.setScene(previousScene.get());
}
// Getter & Setter
public StringBinding vaultNameProperty(){
return vaultName;
}
public String getVaultName(){
return vaultName.get();
}
}
@@ -1,24 +1,19 @@
package org.cryptomator.ui.addvaultwizard;
import dagger.Binds;
import dagger.Lazy;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoMap;
import dagger.multibindings.IntoSet;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Modality;
import javafx.stage.Stage;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FXMLLoaderFactory;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxControllerKey;
@@ -32,7 +27,6 @@ import java.nio.file.Path;
import java.util.Map;
import java.util.Optional;
import java.util.ResourceBundle;
import java.util.Set;
@Module
public abstract class AddVaultModule {
@@ -40,22 +34,19 @@ public abstract class AddVaultModule {
@Provides
@AddVaultWizardWindow
@AddVaultWizardScoped
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, resourceBundle);
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
}
@Provides
@AddVaultWizardWindow
@AddVaultWizardScoped
static Stage provideStage(@MainWindow Stage owner, ResourceBundle resourceBundle, @Named("windowIcon") Optional<Image> windowIcon, @AddVaultWizardWindow Lazy<Map<KeyCodeCombination, Runnable>> accelerators) {
static Stage provideStage(@MainWindow Stage owner, ResourceBundle resourceBundle, @Named("windowIcon") Optional<Image> windowIcon) {
Stage stage = new Stage();
stage.setTitle(resourceBundle.getString("addvaultwizard.title"));
stage.setResizable(false);
stage.initModality(Modality.WINDOW_MODAL);
stage.initOwner(owner);
stage.sceneProperty().addListener(observable -> {
stage.getScene().getAccelerators().putAll(accelerators.get());
});
windowIcon.ifPresent(stage.getIcons()::add);
return stage;
}
@@ -67,6 +58,7 @@ public abstract class AddVaultModule {
}
@Provides
@Named("vaultName")
@AddVaultWizardScoped
static StringProperty provideVaultName() {
return new SimpleStringProperty("");
@@ -79,24 +71,11 @@ public abstract class AddVaultModule {
return new SimpleObjectProperty<>();
}
// ------------------
@Provides
@AddVaultWizardWindow
@Named("recoveryKey")
@AddVaultWizardScoped
static Map<KeyCodeCombination, Runnable> provideDefaultAccellerators(@AddVaultWizardWindow Set<Map.Entry<KeyCombination, Runnable>> accelerators) {
return Map.ofEntries(accelerators.toArray(Map.Entry[]::new));
}
@Provides
@IntoSet
@AddVaultWizardWindow
static Map.Entry<KeyCombination, Runnable> provideCloseWindowShortcut(@AddVaultWizardWindow Stage window) {
if (SystemUtils.IS_OS_WINDOWS) {
return Map.entry(new KeyCodeCombination(KeyCode.F4, KeyCombination.ALT_DOWN), window::close);
} else {
return Map.entry(new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN), window::close);
}
static StringProperty provideRecoveryKey() {
return new SimpleStringProperty();
}
// ------------------
@@ -104,48 +83,57 @@ public abstract class AddVaultModule {
@Provides
@FxmlScene(FxmlFile.ADDVAULT_WELCOME)
@AddVaultWizardScoped
static Scene provideWelcomeScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders, @AddVaultWizardWindow Stage window) {
Scene scene = fxmlLoaders.createScene("/fxml/addvault_welcome.fxml");
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
scene.getAccelerators().put(cmdW, window::close);
return scene;
static Scene provideWelcomeScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_WELCOME.getRessourcePathString());
}
@Provides
@FxmlScene(FxmlFile.ADDVAULT_EXISTING)
@AddVaultWizardScoped
static Scene provideChooseExistingVaultScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders, @AddVaultWizardWindow Stage window) {
return fxmlLoaders.createScene("/fxml/addvault_existing.fxml");
static Scene provideChooseExistingVaultScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_EXISTING.getRessourcePathString());
}
@Provides
@FxmlScene(FxmlFile.ADDVAULT_EXISTING_ERROR)
@AddVaultWizardScoped
static Scene provideChooseExistingVaultErrorScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_EXISTING_ERROR.getRessourcePathString());
}
@Provides
@FxmlScene(FxmlFile.ADDVAULT_NEW_NAME)
@AddVaultWizardScoped
static Scene provideCreateNewVaultNameScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders, @AddVaultWizardWindow Stage window) {
return fxmlLoaders.createScene("/fxml/addvault_new_name.fxml");
static Scene provideCreateNewVaultNameScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_NEW_NAME.getRessourcePathString());
}
@Provides
@FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION)
@AddVaultWizardScoped
static Scene provideCreateNewVaultLocationScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders, @AddVaultWizardWindow Stage window) {
return fxmlLoaders.createScene("/fxml/addvault_new_location.fxml");
static Scene provideCreateNewVaultLocationScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_NEW_LOCATION.getRessourcePathString());
}
@Provides
@FxmlScene(FxmlFile.ADDVAULT_NEW_PASSWORD)
@AddVaultWizardScoped
static Scene provideCreateNewVaultPasswordScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders, @AddVaultWizardWindow Stage window) {
return fxmlLoaders.createScene("/fxml/addvault_new_password.fxml");
static Scene provideCreateNewVaultPasswordScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_NEW_PASSWORD.getRessourcePathString());
}
@Provides
@FxmlScene(FxmlFile.ADDVAULT_NEW_RECOVERYKEY)
@AddVaultWizardScoped
static Scene provideCreateNewVaultRecoveryKeyScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_NEW_RECOVERYKEY.getRessourcePathString());
}
@Provides
@FxmlScene(FxmlFile.ADDVAULT_SUCCESS)
@AddVaultWizardScoped
static Scene provideCreateNewVaultSuccessScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders, @AddVaultWizardWindow Stage window) {
return fxmlLoaders.createScene("/fxml/addvault_success.fxml");
static Scene provideCreateNewVaultSuccessScene(@AddVaultWizardWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene(FxmlFile.ADDVAULT_SUCCESS.getRessourcePathString());
}
// ------------------
@@ -160,6 +148,11 @@ public abstract class AddVaultModule {
@FxControllerKey(ChooseExistingVaultController.class)
abstract FxController bindChooseExistingVaultController(ChooseExistingVaultController controller);
@Binds
@IntoMap
@FxControllerKey(AddVaultFailureExisitingController.class)
abstract FxController bindAddVaultFailureExistingController(AddVaultFailureExisitingController controller);
@Binds
@IntoMap
@FxControllerKey(CreateNewVaultNameController.class)
@@ -179,4 +172,9 @@ public abstract class AddVaultModule {
@IntoMap
@FxControllerKey(AddVaultSuccessController.class)
abstract FxController bindAddVaultSuccessController(AddVaultSuccessController controller);
@Binds
@IntoMap
@FxControllerKey(CreateNewVaultRecoveryKeyController.class)
abstract FxController bindCreateNewVaultRecoveryKeyController(CreateNewVaultRecoveryKeyController controller);
}
@@ -28,16 +28,18 @@ public class ChooseExistingVaultController implements FxController {
private final Stage window;
private final Lazy<Scene> welcomeScene;
private final Lazy<Scene> successScene;
private final Lazy<Scene> errorScene;
private final ObjectProperty<Path> vaultPath;
private final ObjectProperty<Vault> vault;
private final VaultListManager vaultListManager;
private final ResourceBundle resourceBundle;
@Inject
ChooseExistingVaultController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy<Scene> welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, ObjectProperty<Path> vaultPath, @AddVaultWizardWindow ObjectProperty<Vault> vault, VaultListManager vaultListManager, ResourceBundle resourceBundle) {
ChooseExistingVaultController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy<Scene> welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, @FxmlScene(FxmlFile.ADDVAULT_EXISTING_ERROR) Lazy<Scene> errorScene, ObjectProperty<Path> vaultPath, @AddVaultWizardWindow ObjectProperty<Vault> vault, VaultListManager vaultListManager, ResourceBundle resourceBundle) {
this.window = window;
this.welcomeScene = welcomeScene;
this.successScene = successScene;
this.errorScene = errorScene;
this.vaultPath = vaultPath;
this.vault = vault;
this.vaultListManager = vaultListManager;
@@ -51,20 +53,19 @@ public class ChooseExistingVaultController implements FxController {
@FXML
public void chooseFileAndNext() {
//TODO: error handling & cannot unlock added vault
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle(resourceBundle.getString("addvaultwizard.existing.filePickerTitle"));
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Cryptomator Masterkey", "*.cryptomator"));
File file = fileChooser.showOpenDialog(window);
if (file != null) {
vaultPath.setValue(file.toPath().toAbsolutePath().getParent());
File masterkeyFile = fileChooser.showOpenDialog(window);
if (masterkeyFile != null) {
vaultPath.setValue(masterkeyFile.toPath().toAbsolutePath().getParent());
try {
Vault newVault = vaultListManager.add(vaultPath.get());
vault.set(newVault);
window.setScene(successScene.get());
} catch (NoSuchFileException e) {
LOG.error("Nope", e);
// TODO
LOG.error("Failed to open existing vault.", e);
window.setScene(errorScene.get());
}
}
}
@@ -23,12 +23,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Named;
import java.io.File;
import java.io.IOException;
import java.nio.file.DirectoryNotEmptyException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ResourceBundle;
@@ -58,7 +57,7 @@ public class CreateNewVaultLocationController implements FxController {
public RadioButton customRadioButton;
@Inject
CreateNewVaultLocationController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_NEW_NAME) Lazy<Scene> chooseNameScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_PASSWORD) Lazy<Scene> choosePasswordScene, LocationPresets locationPresets, ObjectProperty<Path> vaultPath, StringProperty vaultName, ResourceBundle resourceBundle) {
CreateNewVaultLocationController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_NEW_NAME) Lazy<Scene> chooseNameScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_PASSWORD) Lazy<Scene> choosePasswordScene, LocationPresets locationPresets, ObjectProperty<Path> vaultPath, @Named("vaultName") StringProperty vaultName, ResourceBundle resourceBundle) {
this.window = window;
this.chooseNameScene = chooseNameScene;
this.choosePasswordScene = choosePasswordScene;
@@ -115,14 +114,12 @@ public class CreateNewVaultLocationController implements FxController {
Files.delete(createdDir); // assert: dir exists and is empty
window.setScene(choosePasswordScene.get());
} catch (FileAlreadyExistsException e) {
LOG.warn("Can not use already existing vault path: {}", vaultPath.get());
LOG.warn("Can not use already existing vault path {}", vaultPath.get());
warningText.set(resourceBundle.getString("addvaultwizard.new.fileAlreadyExists"));
} catch (NoSuchFileException | DirectoryNotEmptyException e) {
LOG.error("Failed to delete recently created directory.", e);
// TODO show generic error text for unexpected exception
} catch (IOException e) {
LOG.warn("Can not create vault at path: {}", vaultPath.get());
// TODO show generic error text for unexpected exception
LOG.warn("Thrown Exception:", e);
warningText.set(resourceBundle.getString("addvaultwizard.new.ioException"));
}
}
@@ -16,6 +16,7 @@ import org.cryptomator.ui.common.FxmlFile;
import org.cryptomator.ui.common.FxmlScene;
import javax.inject.Inject;
import javax.inject.Named;
import java.nio.file.Path;
import java.util.ResourceBundle;
import java.util.regex.Pattern;
@@ -36,7 +37,7 @@ public class CreateNewVaultNameController implements FxController {
private final StringBinding warningText;
@Inject
CreateNewVaultNameController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy<Scene> welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy<Scene> chooseLocationScene, ObjectProperty<Path> vaultPath, StringProperty vaultName, ResourceBundle resourceBundle) {
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) {
this.window = window;
this.welcomeScene = welcomeScene;
this.chooseLocationScene = chooseLocationScene;
@@ -12,7 +12,6 @@ import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.StringProperty;
import javafx.fxml.FXML;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
@@ -28,11 +27,13 @@ import org.cryptomator.ui.common.Tasks;
import org.cryptomator.ui.controls.FontAwesome5IconView;
import org.cryptomator.ui.controls.NiceSecurePasswordField;
import org.cryptomator.ui.common.PasswordStrengthUtil;
import org.cryptomator.ui.recoverykey.RecoveryKeyFactory;
import org.fxmisc.easybind.EasyBind;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Named;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.channels.WritableByteChannel;
@@ -56,11 +57,13 @@ public class CreateNewVaultPasswordController implements FxController {
private final Stage window;
private final Lazy<Scene> chooseLocationScene;
private final Lazy<Scene> successScene;
private final Lazy<Scene> recoveryKeyScene;
private final ExecutorService executor;
private final StringProperty vaultName;
private final ObjectProperty<Path> vaultPath;
private final ObjectProperty<Vault> vault;
private final RecoveryKeyFactory recoveryKeyFactory;
private final StringProperty vaultNameProperty;
private final ObjectProperty<Path> vaultPathProperty;
private final ObjectProperty<Vault> vaultProperty;
private final StringProperty recoveryKeyProperty;
private final VaultListManager vaultListManager;
private final ResourceBundle resourceBundle;
private final PasswordStrengthUtil strengthRater;
@@ -77,17 +80,18 @@ public class CreateNewVaultPasswordController implements FxController {
public FontAwesome5IconView checkmark;
public FontAwesome5IconView cross;
public Label passwordMatchLabel;
public CheckBox finalConfirmationCheckbox;
@Inject
CreateNewVaultPasswordController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy<Scene> chooseLocationScene, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, ExecutorService executor, StringProperty vaultName, ObjectProperty<Path> vaultPath, @AddVaultWizardWindow ObjectProperty<Vault> vault, VaultListManager vaultListManager, ResourceBundle resourceBundle, PasswordStrengthUtil strengthRater, ReadmeGenerator readmeGenerator) {
CreateNewVaultPasswordController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_NEW_LOCATION) Lazy<Scene> chooseLocationScene, @FxmlScene(FxmlFile.ADDVAULT_NEW_RECOVERYKEY) Lazy<Scene> recoveryKeyScene, ExecutorService executor, RecoveryKeyFactory recoveryKeyFactory, @Named("vaultName") StringProperty vaultName, ObjectProperty<Path> vaultPath, @AddVaultWizardWindow ObjectProperty<Vault> vault, @Named("recoveryKey") StringProperty recoveryKey, VaultListManager vaultListManager, ResourceBundle resourceBundle, PasswordStrengthUtil strengthRater, ReadmeGenerator readmeGenerator) {
this.window = window;
this.chooseLocationScene = chooseLocationScene;
this.successScene = successScene;
this.recoveryKeyScene = recoveryKeyScene;
this.executor = executor;
this.vaultName = vaultName;
this.vaultPath = vaultPath;
this.vault = vault;
this.recoveryKeyFactory = recoveryKeyFactory;
this.vaultNameProperty = vaultName;
this.vaultPathProperty = vaultPath;
this.vaultProperty = vault;
this.recoveryKeyProperty = recoveryKey;
this.vaultListManager = vaultListManager;
this.resourceBundle = resourceBundle;
this.strengthRater = strengthRater;
@@ -105,7 +109,7 @@ public class CreateNewVaultPasswordController implements FxController {
//binding indicating if the passwords not match
BooleanBinding passwordsMatch = Bindings.createBooleanBinding(() -> CharSequence.compare(passwordField.getCharacters(), reenterField.getCharacters()) == 0, passwordField.textProperty(), reenterField.textProperty());
BooleanBinding reenterFieldNotEmpty = reenterField.textProperty().isNotEmpty();
readyToCreateVault.bind(reenterFieldNotEmpty.and(passwordsMatch).and(finalConfirmationCheckbox.selectedProperty()).and(processing.not()));
readyToCreateVault.bind(reenterFieldNotEmpty.and(passwordsMatch).and(processing.not()));
//make match indicator invisible when passwords do not match or one is empty
passwordMatchBox.visibleProperty().bind(reenterFieldNotEmpty);
checkmark.visibleProperty().bind(passwordsMatch.and(reenterFieldNotEmpty));
@@ -125,7 +129,7 @@ public class CreateNewVaultPasswordController implements FxController {
@FXML
public void next() {
Path pathToVault = vaultPath.get();
Path pathToVault = vaultPathProperty.get();
try {
Files.createDirectory(pathToVault);
@@ -140,8 +144,9 @@ public class CreateNewVaultPasswordController implements FxController {
processing.set(true);
Tasks.create(() -> {
initializeVault(pathToVault, passwordField.getCharacters());
}).onSuccess(() -> {
initializationSucceeded(pathToVault);
return recoveryKeyFactory.createRecoveryKey(pathToVault, passwordField.getCharacters());
}).onSuccess(recoveryKey -> {
initializationSucceeded(pathToVault, recoveryKey);
}).onError(IOException.class, e -> {
// TODO show generic error screen
LOG.error("", e);
@@ -171,11 +176,12 @@ public class CreateNewVaultPasswordController implements FxController {
LOG.info("Created vault at {}", path);
}
private void initializationSucceeded(Path pathToVault) {
private void initializationSucceeded(Path pathToVault, String recoveryKey) {
try {
Vault newVault = vaultListManager.add(pathToVault);
vault.set(newVault);
window.setScene(successScene.get());
vaultProperty.set(newVault);
recoveryKeyProperty.set(recoveryKey);
window.setScene(recoveryKeyScene.get());
} catch (NoSuchFileException e) {
throw new UncheckedIOException(e);
}
@@ -184,11 +190,11 @@ public class CreateNewVaultPasswordController implements FxController {
/* Getter/Setter */
public String getVaultName() {
return vaultName.get();
return vaultNameProperty.get();
}
public StringProperty vaultNameProperty() {
return vaultName;
return vaultNameProperty;
}
public IntegerProperty passwordStrengthProperty() {
@@ -0,0 +1,42 @@
package org.cryptomator.ui.addvaultwizard;
import dagger.Lazy;
import javafx.beans.property.StringProperty;
import javafx.fxml.FXML;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxmlFile;
import org.cryptomator.ui.common.FxmlScene;
import javax.inject.Inject;
import javax.inject.Named;
public class CreateNewVaultRecoveryKeyController implements FxController {
private final Stage window;
private final Lazy<Scene> successScene;
private final StringProperty recoveryKeyProperty;
@Inject
CreateNewVaultRecoveryKeyController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, @Named("recoveryKey")StringProperty recoveryKey) {
this.window = window;
this.successScene = successScene;
this.recoveryKeyProperty = recoveryKey;
}
@FXML
public void next() {
window.setScene(successScene.get());
}
/* Getter/Setter */
public String getRecoveryKey() {
return recoveryKeyProperty.get();
}
public StringProperty recoveryKeyProperty() {
return recoveryKeyProperty;
}
}
@@ -8,6 +8,7 @@ import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Modality;
import javafx.stage.Stage;
import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FXMLLoaderFactory;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxControllerKey;
@@ -26,8 +27,8 @@ abstract class ChangePasswordModule {
@Provides
@ChangePasswordWindow
@ChangePasswordScoped
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, resourceBundle);
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
}
@Provides
@@ -0,0 +1,59 @@
package org.cryptomator.ui.common;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Stage;
import javafx.stage.Window;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.ui.fxapp.FxApplicationScoped;
import javax.inject.Inject;
import java.util.function.Function;
@FxApplicationScoped
public class DefaultSceneFactory implements Function<Parent, Scene> {
protected static final KeyCodeCombination ALT_F4 = new KeyCodeCombination(KeyCode.F4, KeyCombination.ALT_DOWN);
protected static final KeyCodeCombination SHORTCUT_W = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
protected final Settings settings;
@Inject
public DefaultSceneFactory(Settings settings) {
this.settings = settings;
}
@Override
public Scene apply(Parent root) {
Scene scene = new Scene(root);
configureRoot(root);
configureScene(scene);
return scene;
}
protected void configureRoot(Parent root) {
root.nodeOrientationProperty().bind(settings.userInterfaceOrientation());
}
protected void configureScene(Scene scene) {
scene.windowProperty().addListener(observable -> {
Window window = scene.getWindow();
if (window instanceof Stage) {
setupDefaultAccelerators(scene, (Stage) window);
}
});
}
protected void setupDefaultAccelerators(Scene scene, Stage stage) {
if (SystemUtils.IS_OS_WINDOWS) {
scene.getAccelerators().put(ALT_F4, stage::close);
} else {
scene.getAccelerators().put(SHORTCUT_W, stage::close);
}
}
}
@@ -1,24 +1,28 @@
package org.cryptomator.ui.common;
import com.google.common.base.Splitter;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javax.inject.Provider;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.function.Function;
public class FXMLLoaderFactory {
private final Map<Class<? extends FxController>, Provider<FxController>> factories;
private final Map<Class<? extends FxController>, Provider<FxController>> controllerFactories;
private final Function<Parent, Scene> sceneFactory;
private final ResourceBundle resourceBundle;
public FXMLLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
this.factories = factories;
public FXMLLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> controllerFactories, Function<Parent, Scene> sceneFactory, ResourceBundle resourceBundle) {
this.controllerFactories = controllerFactories;
this.sceneFactory = sceneFactory;
this.resourceBundle = resourceBundle;
}
@@ -34,6 +38,7 @@ public class FXMLLoaderFactory {
/**
* Loads the FXML given fxml resource in a new FXMLLoader instance.
*
* @param fxmlResourceName Name of the resource (as in {@link Class#getResource(String)}).
* @return The FXMLLoader used to load the file
* @throws IOException if an error occurs while loading the FXML file
@@ -48,6 +53,7 @@ public class FXMLLoaderFactory {
/**
* {@link #load(String) Loads} the FXML file and creates a new Scene containing the loaded ui.
*
* @param fxmlResourceName Name of the resource (as in {@link Class#getResource(String)}).
* @throws UncheckedIOException wrapping any IOException thrown by {@link #load(String)).
*/
@@ -59,14 +65,16 @@ public class FXMLLoaderFactory {
throw new UncheckedIOException("Failed to load " + fxmlResourceName, e);
}
Parent root = loader.getRoot();
return new Scene(root);
List<String> addtionalStyleSheets = Splitter.on(',').omitEmptyStrings().splitToList(resourceBundle.getString("additionalStyleSheets"));
addtionalStyleSheets.forEach(styleSheet -> root.getStylesheets().add("/css/" + styleSheet));
return sceneFactory.apply(root);
}
private FxController constructController(Class<?> aClass) {
if (!factories.containsKey(aClass)) {
if (!controllerFactories.containsKey(aClass)) {
throw new IllegalArgumentException("ViewController not registered: " + aClass);
} else {
return factories.get(aClass).get();
return controllerFactories.get(aClass).get();
}
}
}
@@ -3,9 +3,11 @@ package org.cryptomator.ui.common;
public enum FxmlFile {
ADDVAULT_WELCOME("/fxml/addvault_welcome.fxml"), //
ADDVAULT_EXISTING("/fxml/addvault_existing.fxml"), //
ADDVAULT_EXISTING_ERROR("/fxml/addvault_existing_error.fxml"),
ADDVAULT_NEW_NAME("/fxml/addvault_new_name.fxml"), //
ADDVAULT_NEW_LOCATION("/fxml/addvault_new_location.fxml"), //
ADDVAULT_NEW_PASSWORD("/fxml/addvault_new_password.fxml"), //
ADDVAULT_NEW_RECOVERYKEY("/fxml/addvault_new_recoverykey.fxml"), //
ADDVAULT_SUCCESS("/fxml/addvault_success.fxml"), //
CHANGEPASSWORD("/fxml/changepassword.fxml"), //
FORGET_PASSWORD("/fxml/forget_password.fxml"), //
@@ -15,15 +17,21 @@ public enum FxmlFile {
MIGRATION_SUCCESS("/fxml/migration_success.fxml"), //
PREFERENCES("/fxml/preferences.fxml"), //
QUIT("/fxml/quit.fxml"), //
RECOVERYKEY_CREATE("/fxml/recoverykey_create.fxml"), //
RECOVERYKEY_DISPLAY("/fxml/recoverykey_display.fxml"), //
REMOVE_VAULT("/fxml/remove_vault.fxml"), //
UNLOCK("/fxml/unlock2.fxml"), // TODO rename
UNLOCK("/fxml/unlock.fxml"),
UNLOCK_SUCCESS("/fxml/unlock_success.fxml"), //
VAULT_OPTIONS("/fxml/vault_options.fxml"), //
WRONGFILEALERT("/fxml/wrongfilealert.fxml");
private final String filename;
private final String ressourcePathString;
FxmlFile(String filename) {
this.filename = filename;
FxmlFile(String ressourcePathString) {
this.ressourcePathString = ressourcePathString;
}
public String getRessourcePathString(){
return ressourcePathString;
}
}
@@ -31,8 +31,7 @@ public class PasswordStrengthUtil {
public PasswordStrengthUtil(ResourceBundle resourceBundle) {
this.resourceBundle = resourceBundle;
this.zxcvbn = new Zxcvbn();
this.sanitizedInputs = new ArrayList<>();
this.sanitizedInputs.add("cryptomator");
this.sanitizedInputs = List.of("cryptomator");
}
public int computeRate(String password) {
@@ -9,6 +9,7 @@ public enum FontAwesome5Icon {
CHECK("\uF00C"), //
COG("\uF013"), //
COGS("\uF085"), //
EXCLAMATION("\uF12A"),
EXCLAMATION_TRIANGLE("\uF071"), //
EYE("\uF06E"), //
EYE_SLASH("\uF070"), //
@@ -67,6 +67,10 @@ public class NiceSecurePasswordField extends StackPane {
public void requestFocus() {
passwordField.requestFocus();
}
public String getText() {
return passwordField.getText();
}
public StringProperty textProperty() {
return passwordField.textProperty();
@@ -76,6 +80,10 @@ public class NiceSecurePasswordField extends StackPane {
return passwordField.getCharacters();
}
public void setPassword(CharSequence password) {
passwordField.setPassword(password);
}
public void setPassword(char[] password) {
passwordField.setPassword(password);
}
@@ -11,6 +11,7 @@ import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Modality;
import javafx.stage.Stage;
import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FXMLLoaderFactory;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxControllerKey;
@@ -29,8 +30,8 @@ abstract class ForgetPasswordModule {
@Provides
@ForgetPasswordWindow
@ForgetPasswordScoped
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, resourceBundle);
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
}
@Provides
@@ -46,13 +47,6 @@ abstract class ForgetPasswordModule {
return stage;
}
@Provides
@FxmlScene(FxmlFile.FORGET_PASSWORD)
@ForgetPasswordScoped
static Scene provideForgetPasswordScene(@ForgetPasswordWindow FXMLLoaderFactory fxmlLoaders, @ForgetPasswordWindow Stage window) {
return fxmlLoaders.createScene("/fxml/forget_password.fxml");
}
@Provides
@ForgetPasswordWindow
@ForgetPasswordScoped
@@ -64,6 +58,15 @@ abstract class ForgetPasswordModule {
@ForgetPasswordWindow
@ForgetPasswordScoped
abstract ReadOnlyBooleanProperty bindReadOnlyConfirmedProperty(@ForgetPasswordWindow BooleanProperty confirmedProperty);
// ------------------
@Provides
@FxmlScene(FxmlFile.FORGET_PASSWORD)
@ForgetPasswordScoped
static Scene provideForgetPasswordScene(@ForgetPasswordWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene("/fxml/forget_password.fxml");
}
// ------------------
@@ -8,6 +8,6 @@ import java.lang.annotation.RetentionPolicy;
@Scope
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface ForgetPasswordScoped {
@interface ForgetPasswordScoped {
}
@@ -26,8 +26,6 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import java.awt.desktop.QuitResponse;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
@FxApplicationScoped
public class FxApplication extends Application {
@@ -1,94 +0,0 @@
/*******************************************************************************
* Copyright (c) 2017 Skymatic UG (haftungsbeschränkt).
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the accompanying LICENSE file.
*******************************************************************************/
package org.cryptomator.ui.l10n;
import com.google.common.collect.Sets;
import org.apache.commons.lang3.StringUtils;
import org.cryptomator.ui.fxapp.FxApplicationScoped;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UncheckedIOException;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Objects;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
@FxApplicationScoped
public class Localization extends ResourceBundle {
private static final Logger LOG = LoggerFactory.getLogger(Localization.class);
private static final String LOCALIZATION_DEFAULT_FILE = "/localization/en.txt";
private static final String LOCALIZATION_FILENAME_FMT = "/localization/%s.txt";
private final ResourceBundle fallback;
private final ResourceBundle localized;
@Inject
public Localization() {
try {
this.fallback = Objects.requireNonNull(loadLocalizationFile(LOCALIZATION_DEFAULT_FILE));
LOG.debug("Loaded localization default file: {}", LOCALIZATION_DEFAULT_FILE);
String language = Locale.getDefault().getLanguage();
String region = Locale.getDefault().getCountry();
LOG.debug("Detected language \"{}\" and region \"{}\"", language, region);
ResourceBundle localizationBundle = null;
if (StringUtils.isNotEmpty(language) && StringUtils.isNotEmpty(region)) {
String file = String.format(LOCALIZATION_FILENAME_FMT, language + "_" + region);
LOG.trace("Attempting to load localization from: {}", file);
localizationBundle = loadLocalizationFile(file);
}
if (StringUtils.isNotEmpty(language) && localizationBundle == null) {
String file = String.format(LOCALIZATION_FILENAME_FMT, language);
LOG.trace("Attempting to load localization from: {}", file);
localizationBundle = loadLocalizationFile(file);
}
if (localizationBundle == null) {
LOG.debug("No localization found. Falling back to default language.");
localizationBundle = this.fallback;
}
this.localized = Objects.requireNonNull(localizationBundle);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
// returns null if no resource for given path
private static ResourceBundle loadLocalizationFile(String resourcePath) throws IOException {
try (InputStream in = Localization.class.getResourceAsStream(resourcePath)) {
if (in != null) {
Reader reader = new InputStreamReader(in, StandardCharsets.UTF_8);
return new PropertyResourceBundle(reader);
} else {
return null;
}
}
}
@Override
protected Object handleGetObject(String key) {
return localized.containsKey(key) ? localized.getObject(key) : fallback.getObject(key);
}
@Override
public Enumeration<String> getKeys() {
Collection<String> keys = Sets.union(localized.keySet(), fallback.keySet());
return Collections.enumeration(keys);
}
}
@@ -10,7 +10,6 @@ import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.common.vaults.VaultListManager;
import org.cryptomator.ui.common.FontLoader;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.fxapp.FxApplication;
import org.cryptomator.ui.fxapp.UpdateChecker;
@@ -21,18 +20,15 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Named;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.util.Collection;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@MainWindowScoped
public class MainWindowController implements FxController {
private static final String TITLE_FONT = "/css/dosis-bold.ttf";
private static final Logger LOG = LoggerFactory.getLogger(MainWindowController.class);
private static final String MASTERKEY_FILENAME = "masterkey.cryptomator"; // TODO: deduplicate constant declared in multiple classes
@@ -64,7 +60,6 @@ public class MainWindowController implements FxController {
@FXML
public void initialize() {
LOG.debug("init MainWindowController");
loadFont(TITLE_FONT);
titleBar.setOnMousePressed(event -> {
xOffset = event.getSceneX();
yOffset = event.getSceneY();
@@ -115,14 +110,6 @@ public class MainWindowController implements FxController {
return Stream.empty();
}
private void loadFont(String resourcePath) {
try {
FontLoader.load(resourcePath);
} catch (FontLoader.FontLoaderException e) {
LOG.warn("Error loading font from path: " + resourcePath, e);
}
}
@FXML
public void close() {
if (minimizeToSysTray) {
@@ -12,6 +12,7 @@ import javafx.scene.input.KeyCombination;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent;
import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FXMLLoaderFactory;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxControllerKey;
@@ -34,8 +35,8 @@ abstract class MainWindowModule {
@Provides
@MainWindow
@MainWindowScoped
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, resourceBundle);
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, MainWindowSceneFactory sceneFactory, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
}
@Provides
@@ -57,15 +58,7 @@ abstract class MainWindowModule {
@FxmlScene(FxmlFile.MAIN_WINDOW)
@MainWindowScoped
static Scene provideMainScene(@MainWindow FXMLLoaderFactory fxmlLoaders, MainWindowController mainWindowController, VaultListController vaultListController) {
Scene scene = fxmlLoaders.createScene("/fxml/main_window.fxml");
// still not perfect... cant't we have a global menubar via the AWT tray app?
KeyCombination cmdN = new KeyCodeCombination(KeyCode.N, KeyCombination.SHORTCUT_DOWN);
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
scene.getAccelerators().put(cmdN, vaultListController::didClickAddVault);
scene.getAccelerators().put(cmdW, mainWindowController::close);
return scene;
return fxmlLoaders.createScene("/fxml/main_window.fxml");
}
// ------------------
@@ -0,0 +1,39 @@
package org.cryptomator.ui.mainwindow;
import dagger.Lazy;
import javafx.scene.Scene;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Stage;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.ui.common.DefaultSceneFactory;
import javax.inject.Inject;
@MainWindowScoped
public class MainWindowSceneFactory extends DefaultSceneFactory {
protected static final KeyCodeCombination SHORTCUT_N = new KeyCodeCombination(KeyCode.N, KeyCombination.SHORTCUT_DOWN);
private final Lazy<MainWindowController> mainWindowController;
private final Lazy<VaultListController> vaultListController;
@Inject
public MainWindowSceneFactory(Settings settings, Lazy<MainWindowController> mainWindowController, Lazy<VaultListController> vaultListController) {
super(settings);
this.mainWindowController = mainWindowController;
this.vaultListController = vaultListController;
}
@Override
protected void setupDefaultAccelerators(Scene scene, Stage stage) {
if (SystemUtils.IS_OS_WINDOWS) {
scene.getAccelerators().put(ALT_F4, mainWindowController.get()::close);
} else {
scene.getAccelerators().put(SHORTCUT_W, mainWindowController.get()::close);
}
scene.getAccelerators().put(SHORTCUT_N, vaultListController.get()::didClickAddVault);
}
}
@@ -17,6 +17,7 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject;
//TODO: Add check if a vault in the list is invalid and add notification & controller
@MainWindowScoped
public class VaultListController implements FxController {
@@ -53,10 +54,6 @@ public class VaultListController implements FxController {
if (c.wasAdded()) {
Vault anyAddedVault = c.getAddedSubList().get(0);
vaultList.getSelectionModel().select(anyAddedVault);
window.setIconified(false);
window.show();
window.toFront();
window.requestFocus(); // TODO: this beeps on macOS if there is a modal child window...
}
}
});
@@ -1,19 +1,14 @@
package org.cryptomator.ui.migration;
import dagger.Binds;
import dagger.Lazy;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoMap;
import dagger.multibindings.IntoSet;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Modality;
import javafx.stage.Stage;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FXMLLoaderFactory;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxControllerKey;
@@ -26,7 +21,6 @@ import javax.inject.Provider;
import java.util.Map;
import java.util.Optional;
import java.util.ResourceBundle;
import java.util.Set;
@Module
abstract class MigrationModule {
@@ -34,29 +28,19 @@ abstract class MigrationModule {
@Provides
@MigrationWindow
@MigrationScoped
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, resourceBundle);
}
@Provides
@MigrationWindow
@MigrationScoped
static Map<KeyCodeCombination, Runnable> provideDefaultAccellerators(@MigrationWindow Set<Map.Entry<KeyCombination, Runnable>> accelerators) {
return Map.ofEntries(accelerators.toArray(Map.Entry[]::new));
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
}
@Provides
@MigrationWindow
@MigrationScoped
static Stage provideStage(@MainWindow Stage owner, ResourceBundle resourceBundle, @Named("windowIcon") Optional<Image> windowIcon, @MigrationWindow Lazy<Map<KeyCodeCombination, Runnable>> accelerators) {
static Stage provideStage(@MainWindow Stage owner, ResourceBundle resourceBundle, @Named("windowIcon") Optional<Image> windowIcon) {
Stage stage = new Stage();
stage.setTitle(resourceBundle.getString("migration.title"));
stage.setResizable(false);
stage.initModality(Modality.WINDOW_MODAL);
stage.initOwner(owner);
stage.sceneProperty().addListener(observable -> {
stage.getScene().getAccelerators().putAll(accelerators.get());
});
windowIcon.ifPresent(stage.getIcons()::add);
return stage;
}
@@ -84,19 +68,6 @@ abstract class MigrationModule {
// ------------------
@Provides
@IntoSet
@MigrationWindow
static Map.Entry<KeyCombination, Runnable> provideCloseWindowShortcut(@MigrationWindow Stage window) {
if (SystemUtils.IS_OS_WINDOWS) {
return Map.entry(new KeyCodeCombination(KeyCode.F4, KeyCombination.ALT_DOWN), window::close);
} else {
return Map.entry(new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN), window::close);
}
}
// ------------------
@Binds
@IntoMap
@FxControllerKey(MigrationStartController.class)
@@ -7,8 +7,13 @@ import javafx.animation.Timeline;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.ObjectBinding;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.ReadOnlyDoubleProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.value.WritableValue;
import javafx.concurrent.ScheduledService;
import javafx.concurrent.Task;
import javafx.fxml.FXML;
import javafx.scene.Scene;
import javafx.scene.control.ContentDisplay;
@@ -17,6 +22,7 @@ import javafx.util.Duration;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.common.vaults.VaultState;
import org.cryptomator.cryptofs.migration.Migrators;
import org.cryptomator.cryptofs.migration.api.MigrationProgressListener;
import org.cryptomator.cryptofs.migration.api.NoApplicableMigratorException;
import org.cryptomator.cryptolib.api.InvalidPassphraseException;
import org.cryptomator.keychain.KeychainAccess;
@@ -39,6 +45,7 @@ public class MigrationRunController implements FxController {
private static final Logger LOG = LoggerFactory.getLogger(MigrationRunController.class);
private static final String MASTERKEY_FILENAME = "masterkey.cryptomator"; // TODO: deduplicate constant declared in multiple classes
private static final Duration MIGRATION_PROGRESS_UPDATE_INTERVAL = Duration.millis(25);
private final Stage window;
private final Vault vault;
@@ -48,6 +55,9 @@ public class MigrationRunController implements FxController {
private final Lazy<Scene> successScene;
private final ObjectBinding<ContentDisplay> migrateButtonContentDisplay;
private final BooleanProperty migrationButtonDisabled;
private final DoubleProperty migrationProgress;
private final ScheduledService<Double> migrationProgressObservationService;
private volatile double volatileMigrationProgress = -1.0;
public NiceSecurePasswordField passwordField;
@Inject
@@ -60,6 +70,10 @@ public class MigrationRunController implements FxController {
this.successScene = successScene;
this.migrateButtonContentDisplay = Bindings.createObjectBinding(this::getMigrateButtonContentDisplay, vault.stateProperty());
this.migrationButtonDisabled = new SimpleBooleanProperty();
this.migrationProgress = new SimpleDoubleProperty(volatileMigrationProgress);
this.migrationProgressObservationService = new MigrationProgressObservationService();
migrationProgressObservationService.setExecutor(executor);
migrationProgressObservationService.setPeriod(MIGRATION_PROGRESS_UPDATE_INTERVAL);
}
public void initialize() {
@@ -79,17 +93,18 @@ public class MigrationRunController implements FxController {
LOG.info("Migrating vault {}", vault.getPath());
CharSequence password = passwordField.getCharacters();
vault.setState(VaultState.PROCESSING);
migrationProgressObservationService.start();
Tasks.create(() -> {
Migrators migrators = Migrators.get();
migrators.migrate(vault.getPath(), MASTERKEY_FILENAME, password);
migrators.migrate(vault.getPath(), MASTERKEY_FILENAME, password, this::migrationProgressChanged);
return migrators.needsMigration(vault.getPath(), MASTERKEY_FILENAME);
}).onSuccess(needsAnotherMigration -> {
LOG.info("Migration of '{}' succeeded.", vault.getDisplayableName());
if (needsAnotherMigration) {
vault.setState(VaultState.NEEDS_MIGRATION);
} else {
vault.setState(VaultState.LOCKED);
passwordField.swipe();
LOG.info("Migration of '{}' succeeded.", vault.getDisplayableName());
window.setScene(successScene.get());
}
}).onError(InvalidPassphraseException.class, e -> {
@@ -105,9 +120,29 @@ public class MigrationRunController implements FxController {
LOG.error("Migration failed for technical reasons.", e);
vault.setState(VaultState.ERROR);
// TODO show generic error screen
}).andFinally(() -> {
migrationProgressObservationService.cancel();
migrationProgressObservationService.reset();
}).runOnce(executor);
}
// Called by a background task. We can not directly modify observable properties from here
private void migrationProgressChanged(MigrationProgressListener.ProgressState state, double progress) {
switch (state) {
case INITIALIZING:
volatileMigrationProgress = -1.0;
break;
case MIGRATING:
volatileMigrationProgress = progress;
break;
case FINALIZING:
volatileMigrationProgress = 1.0;
break;
default:
throw new IllegalStateException("Unexpted state " + state);
}
}
private void loadStoredPassword() {
assert keychainAccess.isPresent();
char[] storedPw = null;
@@ -126,6 +161,27 @@ public class MigrationRunController implements FxController {
}
}
// Sets migrationProgress to volatileMigrationProgress at its configured interval
private class MigrationProgressObservationService extends ScheduledService<Double> {
@Override
protected Task<Double> createTask() {
return new Task<>() {
@Override
protected Double call() {
return volatileMigrationProgress;
}
};
}
@Override
protected void succeeded() {
assert getValue() != null;
migrationProgress.set(getValue());
super.succeeded();
}
}
/* Animations */
private void shakeWindow() {
@@ -180,4 +236,12 @@ public class MigrationRunController implements FxController {
}
}
public ReadOnlyDoubleProperty migrationProgressProperty() {
return migrationProgress;
}
public double getMigrationProgress() {
return migrationProgress.get();
}
}
@@ -1,21 +1,33 @@
package org.cryptomator.ui.preferences;
import javafx.beans.value.ObservableValue;
import javafx.geometry.NodeOrientation;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.RadioButton;
import javafx.scene.control.Toggle;
import javafx.scene.control.ToggleGroup;
import javafx.util.StringConverter;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.common.settings.UiTheme;
import org.cryptomator.ui.common.FxController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
@PreferencesScoped
public class GeneralPreferencesController implements FxController {
private static final Logger LOG = LoggerFactory.getLogger(GeneralPreferencesController.class);
private final Settings settings;
public ChoiceBox<UiTheme> themeChoiceBox;
public CheckBox startHiddenCheckbox;
public CheckBox debugModeCheckbox;
public ToggleGroup nodeOrientation;
public RadioButton nodeOrientationLtr;
public RadioButton nodeOrientationRtl;
@Inject
GeneralPreferencesController(Settings settings) {
@@ -30,6 +42,20 @@ public class GeneralPreferencesController implements FxController {
startHiddenCheckbox.selectedProperty().bindBidirectional(settings.startHidden());
debugModeCheckbox.selectedProperty().bindBidirectional(settings.debugMode());
nodeOrientation.selectedToggleProperty().addListener(this::toggleNodeOrientation);
nodeOrientationLtr.setSelected(settings.userInterfaceOrientation().get() == NodeOrientation.LEFT_TO_RIGHT);
nodeOrientationRtl.setSelected(settings.userInterfaceOrientation().get() == NodeOrientation.RIGHT_TO_LEFT);
}
private void toggleNodeOrientation(@SuppressWarnings("unused") ObservableValue<? extends Toggle> observable, @SuppressWarnings("unused") Toggle oldValue, Toggle newValue) {
if (nodeOrientationLtr.equals(newValue)) {
settings.userInterfaceOrientation().set(NodeOrientation.LEFT_TO_RIGHT);
} else if (nodeOrientationRtl.equals(newValue)) {
settings.userInterfaceOrientation().set(NodeOrientation.RIGHT_TO_LEFT);
} else {
LOG.warn("Unexpected toggle option {}", newValue);
}
}
/* Helper classes */
@@ -6,10 +6,8 @@ import dagger.Provides;
import dagger.multibindings.IntoMap;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Stage;
import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FXMLLoaderFactory;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxControllerKey;
@@ -28,8 +26,8 @@ abstract class PreferencesModule {
@Provides
@PreferencesWindow
@PreferencesScoped
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, resourceBundle);
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
}
@Provides
@@ -46,13 +44,8 @@ abstract class PreferencesModule {
@Provides
@FxmlScene(FxmlFile.PREFERENCES)
@PreferencesScoped
static Scene providePreferencesScene(@PreferencesWindow FXMLLoaderFactory fxmlLoaders, @PreferencesWindow Stage window) {
Scene scene = fxmlLoaders.createScene("/fxml/preferences.fxml");
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
scene.getAccelerators().put(cmdW, window::close);
return scene;
static Scene providePreferencesScene(@PreferencesWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene("/fxml/preferences.fxml");
}
// ------------------
@@ -16,6 +16,9 @@ import org.cryptomator.ui.common.FxController;
import javax.inject.Inject;
/**
* TODO: if WebDAV is selected under Windows, show warning that specific mount options (like selecting a directory as mount point) are _not_ supported
*/
@PreferencesScoped
public class VolumePreferencesController implements FxController {
@@ -11,6 +11,7 @@ import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Modality;
import javafx.stage.Stage;
import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FXMLLoaderFactory;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxControllerKey;
@@ -29,8 +30,8 @@ abstract class QuitModule {
@Provides
@QuitWindow
@QuitScoped
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, resourceBundle);
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
}
@Provides
@@ -48,13 +49,8 @@ abstract class QuitModule {
@Provides
@FxmlScene(FxmlFile.QUIT)
@QuitScoped
static Scene provideUnlockScene(@QuitWindow FXMLLoaderFactory fxmlLoaders, @QuitWindow Stage window) {
Scene scene = fxmlLoaders.createScene("/fxml/quit.fxml");
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
scene.getAccelerators().put(cmdW, window::close);
return scene;
static Scene provideUnlockScene(@QuitWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene("/fxml/quit.fxml");
}
// ------------------
@@ -0,0 +1,45 @@
package org.cryptomator.ui.recoverykey;
import dagger.BindsInstance;
import dagger.Lazy;
import dagger.Subcomponent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.ui.common.FxmlFile;
import org.cryptomator.ui.common.FxmlScene;
import javax.annotation.Nullable;
import javax.inject.Named;
import java.util.Optional;
@RecoveryKeyScoped
@Subcomponent(modules = {RecoveryKeyModule.class})
public interface RecoveryKeyComponent {
@RecoveryKeyWindow
Stage window();
@FxmlScene(FxmlFile.RECOVERYKEY_CREATE)
Lazy<Scene> scene();
default void showRecoveryKeyCreationWindow() {
Stage stage = window();
stage.setScene(scene().get());
stage.sizeToScene();
stage.show();
}
@Subcomponent.Builder
interface Builder {
@BindsInstance
Builder vault(@RecoveryKeyWindow Vault vault);
@BindsInstance
Builder owner(@Named("keyRecoveryOwner") Stage owner);
RecoveryKeyComponent build();
}
}
@@ -0,0 +1,103 @@
package org.cryptomator.ui.recoverykey;
import dagger.Lazy;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.beans.property.ReadOnlyStringProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.WritableValue;
import javafx.fxml.FXML;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.util.Duration;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.cryptolib.api.InvalidPassphraseException;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxmlFile;
import org.cryptomator.ui.common.FxmlScene;
import org.cryptomator.ui.common.Tasks;
import org.cryptomator.ui.controls.NiceSecurePasswordField;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Nullable;
import javax.inject.Inject;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
@RecoveryKeyScoped
public class RecoveryKeyCreationController implements FxController {
private static final Logger LOG = LoggerFactory.getLogger(RecoveryKeyCreationController.class);
private final Stage window;
private final Lazy<Scene> successScene;
private final Vault vault;
private final ExecutorService executor;
private final RecoveryKeyFactory recoveryKeyFactory;
private final StringProperty recoveryKeyProperty;
public NiceSecurePasswordField passwordField;
@Inject
public RecoveryKeyCreationController(@RecoveryKeyWindow Stage window, @FxmlScene(FxmlFile.RECOVERYKEY_DISPLAY) Lazy<Scene> successScene, @RecoveryKeyWindow Vault vault, RecoveryKeyFactory recoveryKeyFactory, ExecutorService executor, @RecoveryKeyWindow StringProperty recoveryKey) {
this.window = window;
this.successScene = successScene;
this.vault = vault;
this.executor = executor;
this.recoveryKeyFactory = recoveryKeyFactory;
this.recoveryKeyProperty = recoveryKey;
}
@FXML
public void createRecoveryKey() {
Tasks.create(() -> {
return recoveryKeyFactory.createRecoveryKey(vault.getPath(), passwordField.getCharacters());
}).onSuccess(result -> {
recoveryKeyProperty.set(result);
window.setScene(successScene.get());
}).onError(IOException.class, e -> {
LOG.error("Creation of recovery key failed.", e);
}).onError(InvalidPassphraseException.class, e -> {
shakeWindow();
}).runOnce(executor);
}
@FXML
public void close() {
window.close();
}
/* Animations */
private void shakeWindow() {
WritableValue<Double> writableWindowX = new WritableValue<>() {
@Override
public Double getValue() {
return window.getX();
}
@Override
public void setValue(Double value) {
window.setX(value);
}
};
Timeline timeline = new Timeline( //
new KeyFrame(Duration.ZERO, new KeyValue(writableWindowX, window.getX())), //
new KeyFrame(new Duration(100), new KeyValue(writableWindowX, window.getX() - 22.0)), //
new KeyFrame(new Duration(200), new KeyValue(writableWindowX, window.getX() + 18.0)), //
new KeyFrame(new Duration(300), new KeyValue(writableWindowX, window.getX() - 14.0)), //
new KeyFrame(new Duration(400), new KeyValue(writableWindowX, window.getX() + 10.0)), //
new KeyFrame(new Duration(500), new KeyValue(writableWindowX, window.getX() - 6.0)), //
new KeyFrame(new Duration(600), new KeyValue(writableWindowX, window.getX() + 2.0)), //
new KeyFrame(new Duration(700), new KeyValue(writableWindowX, window.getX())) //
);
timeline.play();
}
/* Getter/Setter */
public Vault getVault() {
return vault;
}
}
@@ -0,0 +1,44 @@
package org.cryptomator.ui.recoverykey;
import javafx.beans.property.ReadOnlyStringProperty;
import javafx.beans.property.StringProperty;
import javafx.fxml.FXML;
import javafx.stage.Stage;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.ui.common.FxController;
import javax.inject.Inject;
@RecoveryKeyScoped
public class RecoveryKeyDisplayController implements FxController {
private final Stage window;
private final Vault vault;
private final StringProperty recoveryKeyProperty;
@Inject
public RecoveryKeyDisplayController(@RecoveryKeyWindow Stage window, @RecoveryKeyWindow Vault vault, @RecoveryKeyWindow StringProperty recoveryKey) {
this.window = window;
this.vault = vault;
this.recoveryKeyProperty = recoveryKey;
}
@FXML
public void close() {
window.close();
}
/* Getter/Setter */
public Vault getVault() {
return vault;
}
public ReadOnlyStringProperty recoveryKeyProperty() {
return recoveryKeyProperty;
}
public String getRecoveryKey() {
return recoveryKeyProperty.get();
}
}
@@ -0,0 +1,78 @@
package org.cryptomator.ui.recoverykey;
import com.google.common.base.Preconditions;
import com.google.common.hash.Hashing;
import org.cryptomator.cryptofs.CryptoFileSystemProvider;
import org.cryptomator.cryptolib.api.InvalidPassphraseException;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Arrays;
@Singleton
public class RecoveryKeyFactory {
private static final String MASTERKEY_FILENAME = "masterkey.cryptomator"; // TODO: deduplicate constant declared in multiple classes
private final WordEncoder wordEncoder;
@Inject
public RecoveryKeyFactory(WordEncoder wordEncoder) {
this.wordEncoder = wordEncoder;
}
/**
* @param vaultPath Path to the storage location of a vault
* @param password The vault's password
* @return The recovery key of the vault at the given path
* @throws IOException If the masterkey file could not be read
* @throws InvalidPassphraseException If the provided password is wrong
* @apiNote This is a long-running operation and should be invoked in a background thread
*/
public String createRecoveryKey(Path vaultPath, CharSequence password) throws IOException, InvalidPassphraseException {
byte[] rawKey = CryptoFileSystemProvider.exportRawKey(vaultPath, MASTERKEY_FILENAME, new byte[0], password);
try {
return createRecoveryKey(rawKey);
} finally {
Arrays.fill(rawKey, (byte) 0x00);
}
}
// visible for testing
String createRecoveryKey(byte[] rawKey) {
Preconditions.checkArgument(rawKey.length == 64, "key should be 64 bytes");
byte[] paddedKey = Arrays.copyOf(rawKey, 66);
try {
// copy 16 most significant bits of CRC32(rawKey) to the end of paddedKey:
Hashing.crc32().hashBytes(rawKey).writeBytesTo(paddedKey, 64, 2);
return wordEncoder.encodePadded(paddedKey);
} finally {
Arrays.fill(paddedKey, (byte) 0x00);
}
}
/**
* Checks whether a String is a syntactically correct recovery key with a valid checksum
* @param recoveryKey A word sequence which might be a recovery key
* @return <code>true</code> if this seems to be a legitimate recovery key
*/
public boolean validateRecoveryKey(String recoveryKey) {
final byte[] paddedKey;
try {
paddedKey = wordEncoder.decode(recoveryKey);
} catch (IllegalArgumentException e) {
return false;
}
if (paddedKey.length != 66) {
return false;
}
byte[] rawKey = Arrays.copyOf(paddedKey, 64);
byte[] expectedCrc16 = Arrays.copyOfRange(paddedKey, 64, 66);
byte[] actualCrc32 = Hashing.crc32().hashBytes(rawKey).asBytes();
byte[] actualCrc16 = Arrays.copyOf(actualCrc32, 2);
return Arrays.equals(expectedCrc16, actualCrc16);
}
}
@@ -0,0 +1,84 @@
package org.cryptomator.ui.recoverykey;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoMap;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Modality;
import javafx.stage.Stage;
import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FXMLLoaderFactory;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxControllerKey;
import org.cryptomator.ui.common.FxmlFile;
import org.cryptomator.ui.common.FxmlScene;
import javax.inject.Named;
import javax.inject.Provider;
import java.util.Map;
import java.util.Optional;
import java.util.ResourceBundle;
@Module
abstract class RecoveryKeyModule {
@Provides
@RecoveryKeyWindow
@RecoveryKeyScoped
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
}
@Provides
@RecoveryKeyWindow
@RecoveryKeyScoped
static Stage provideStage(ResourceBundle resourceBundle, @Named("windowIcon") Optional<Image> windowIcon, @Named("keyRecoveryOwner") Stage owner) {
Stage stage = new Stage();
stage.setTitle(resourceBundle.getString("recoveryKey.title"));
stage.setResizable(false);
stage.initModality(Modality.WINDOW_MODAL);
stage.initOwner(owner);
windowIcon.ifPresent(stage.getIcons()::add);
return stage;
}
@Provides
@RecoveryKeyWindow
@RecoveryKeyScoped
static StringProperty provideRecoveryKeyProperty() {
return new SimpleStringProperty();
}
// ------------------
@Provides
@FxmlScene(FxmlFile.RECOVERYKEY_CREATE)
@RecoveryKeyScoped
static Scene provideRecoveryKeyCreationScene(@RecoveryKeyWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene("/fxml/recoverykey_create.fxml");
}
@Provides
@FxmlScene(FxmlFile.RECOVERYKEY_DISPLAY)
@RecoveryKeyScoped
static Scene provideRecoveryKeyDisplayScene(@RecoveryKeyWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene("/fxml/recoverykey_display.fxml");
}
// ------------------
@Binds
@IntoMap
@FxControllerKey(RecoveryKeyCreationController.class)
abstract FxController bindRecoveryKeyCreationController(RecoveryKeyCreationController controller);
@Binds
@IntoMap
@FxControllerKey(RecoveryKeyDisplayController.class)
abstract FxController bindRecoveryKeyDisplayController(RecoveryKeyDisplayController controller);
}
@@ -0,0 +1,13 @@
package org.cryptomator.ui.recoverykey;
import javax.inject.Scope;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Scope
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface RecoveryKeyScoped {
}
@@ -0,0 +1,14 @@
package org.cryptomator.ui.recoverykey;
import javax.inject.Qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Qualifier
@Documented
@Retention(RUNTIME)
@interface RecoveryKeyWindow {
}
@@ -1,8 +1,10 @@
package org.cryptomator.ui.keyrecovery;
package org.cryptomator.ui.recoverykey;
import com.google.common.base.Preconditions;
import com.google.common.base.Splitter;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
@@ -14,16 +16,19 @@ import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@Singleton
class WordEncoder {
private static final String DEFAULT_WORD_FILE = "/i18n/4096words_en.txt";
private static final int WORD_COUNT = 4096;
private static final char DELIMITER = ' ';
private final List<String> words;
private final Map<String, Integer> indices;
@Inject
public WordEncoder() {
this("/i18n/4096words_en.txt");
this(DEFAULT_WORD_FILE);
}
public WordEncoder(String wordFile) {
@@ -11,6 +11,7 @@ import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Modality;
import javafx.stage.Stage;
import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FXMLLoaderFactory;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxControllerKey;
@@ -30,8 +31,8 @@ abstract class RemoveVaultModule {
@Provides
@RemoveVaultWindow
@RemoveVaultScoped
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, resourceBundle);
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
}
@Provides
@@ -50,13 +51,8 @@ abstract class RemoveVaultModule {
@Provides
@FxmlScene(FxmlFile.REMOVE_VAULT)
@RemoveVaultScoped
static Scene provideRemoveVaultScene(@RemoveVaultWindow FXMLLoaderFactory fxmlLoaders, @RemoveVaultWindow Stage window) {
Scene scene = fxmlLoaders.createScene("/fxml/remove_vault.fxml");
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
scene.getAccelerators().put(cmdW, window::close);
return scene;
static Scene provideRemoveVaultScene(@RemoveVaultWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene("/fxml/remove_vault.fxml");
}
// ------------------
@@ -6,11 +6,9 @@ import dagger.Provides;
import dagger.multibindings.IntoMap;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Modality;
import javafx.stage.Stage;
import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FXMLLoaderFactory;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxControllerKey;
@@ -24,14 +22,14 @@ import java.util.Map;
import java.util.Optional;
import java.util.ResourceBundle;
@Module(subcomponents={ForgetPasswordComponent.class})
@Module(subcomponents = {ForgetPasswordComponent.class})
abstract class UnlockModule {
@Provides
@UnlockWindow
@UnlockScoped
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, resourceBundle);
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
}
@Provides
@@ -49,25 +47,15 @@ abstract class UnlockModule {
@Provides
@FxmlScene(FxmlFile.UNLOCK)
@UnlockScoped
static Scene provideUnlockScene(@UnlockWindow FXMLLoaderFactory fxmlLoaders, @UnlockWindow Stage window) {
Scene scene = fxmlLoaders.createScene("/fxml/unlock2.fxml"); // TODO rename fxml file
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
scene.getAccelerators().put(cmdW, window::close);
return scene;
static Scene provideUnlockScene(@UnlockWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene("/fxml/unlock.fxml");
}
@Provides
@FxmlScene(FxmlFile.UNLOCK_SUCCESS)
@UnlockScoped
static Scene provideUnlockSuccessScene(@UnlockWindow FXMLLoaderFactory fxmlLoaders, @UnlockWindow Stage window) {
Scene scene = fxmlLoaders.createScene("/fxml/unlock_success.fxml");
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
scene.getAccelerators().put(cmdW, window::close);
return scene;
static Scene provideUnlockSuccessScene(@UnlockWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene("/fxml/unlock_success.fxml");
}
@@ -5,6 +5,7 @@ import javafx.stage.Stage;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.ui.changepassword.ChangePasswordComponent;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.recoverykey.RecoveryKeyComponent;
import javax.inject.Inject;
@@ -14,12 +15,14 @@ public class GeneralVaultOptionsController implements FxController {
private final Vault vault;
private final Stage window;
private final ChangePasswordComponent.Builder changePasswordWindow;
private final RecoveryKeyComponent.Builder recoveryKeyWindow;
@Inject
GeneralVaultOptionsController(@VaultOptionsWindow Vault vault, @VaultOptionsWindow Stage window, ChangePasswordComponent.Builder changePasswordWindow) {
GeneralVaultOptionsController(@VaultOptionsWindow Vault vault, @VaultOptionsWindow Stage window, ChangePasswordComponent.Builder changePasswordWindow, RecoveryKeyComponent.Builder recoveryKeyWindow) {
this.vault = vault;
this.window = window;
this.changePasswordWindow = changePasswordWindow;
this.recoveryKeyWindow = recoveryKeyWindow;
}
@FXML
@@ -27,4 +30,9 @@ public class GeneralVaultOptionsController implements FxController {
changePasswordWindow.vault(vault).owner(window).build().showChangePasswordWindow();
}
@FXML
public void showRecoveryKey() {
recoveryKeyWindow.vault(vault).owner(window).build().showRecoveryKeyCreationWindow();
}
}
@@ -1,34 +1,76 @@
package org.cryptomator.ui.vaultoptions;
import com.google.common.base.Strings;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
import javafx.scene.control.Toggle;
import javafx.scene.control.ToggleGroup;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
import javafx.util.StringConverter;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.common.settings.VolumeImpl;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.common.vaults.WindowsDriveLetters;
import org.cryptomator.ui.common.FxController;
import javax.inject.Inject;
import java.io.File;
import java.nio.file.Path;
import java.util.ResourceBundle;
import java.util.Set;
/**
* TODO: if WebDav is selected on a windows system, custom mount directory is _not_ supported. This is currently not indicated/shown/etc in the ui
*/
@VaultOptionsScoped
public class MountOptionsController implements FxController {
private final Stage window;
private final Vault vault;
private final BooleanProperty osIsWindows = new SimpleBooleanProperty(SystemUtils.IS_OS_WINDOWS);
private final BooleanBinding webDavAndWindows;
private final WindowsDriveLetters windowsDriveLetters;
private final ResourceBundle resourceBundle;
public TextField driveName;
public CheckBox readOnlyCheckbox;
public CheckBox customMountFlagsCheckbox;
public TextField mountFlags;
public ToggleGroup mountPoint;
public RadioButton mountPointAuto;
public RadioButton mountPointWinDriveLetter;
public RadioButton mountPointCustomDir;
public ChoiceBox<String> driveLetterSelection;
@Inject
MountOptionsController(@VaultOptionsWindow Vault vault) {
MountOptionsController(@VaultOptionsWindow Stage window, @VaultOptionsWindow Vault vault, Settings settings, WindowsDriveLetters windowsDriveLetters, ResourceBundle resourceBundle) {
this.window = window;
this.vault = vault;
this.webDavAndWindows = settings.preferredVolumeImpl().isEqualTo(VolumeImpl.WEBDAV).and(osIsWindows);
this.windowsDriveLetters = windowsDriveLetters;
this.resourceBundle = resourceBundle;
}
@FXML
public void initialize() {
driveName.textProperty().bindBidirectional(vault.getVaultSettings().mountName());
// readonly:
readOnlyCheckbox.selectedProperty().bindBidirectional(vault.getVaultSettings().usesReadOnlyMode());
mountFlags.disableProperty().bind(customMountFlagsCheckbox.selectedProperty().not());
readOnlyCheckbox.disableProperty().bind(customMountFlagsCheckbox.selectedProperty());
// custom mount flags:
mountFlags.disableProperty().bind(customMountFlagsCheckbox.selectedProperty().not());
customMountFlagsCheckbox.setSelected(vault.isHavingCustomMountFlags());
if (vault.isHavingCustomMountFlags()) {
mountFlags.textProperty().bindBidirectional(vault.getVaultSettings().mountFlags());
@@ -36,6 +78,25 @@ public class MountOptionsController implements FxController {
} else {
mountFlags.textProperty().bind(vault.defaultMountFlagsProperty());
}
// mount point options:
mountPoint.selectedToggleProperty().addListener(this::toggleMountPoint);
driveLetterSelection.getItems().addAll(windowsDriveLetters.getAllDriveLetters());
driveLetterSelection.setConverter(new WinDriveLetterLabelConverter(windowsDriveLetters));
driveLetterSelection.setValue(vault.getVaultSettings().winDriveLetter().get());
vault.getVaultSettings().usesIndividualMountPath().bind(mountPoint.selectedToggleProperty().isEqualTo(mountPointCustomDir));
vault.getVaultSettings().winDriveLetter().bind( //
Bindings.when(mountPoint.selectedToggleProperty().isEqualTo(mountPointWinDriveLetter)) //
.then(driveLetterSelection.getSelectionModel().selectedItemProperty()) //
.otherwise((String) null) //
);
if (vault.getVaultSettings().usesIndividualMountPath().get()) {
mountPoint.selectToggle(mountPointCustomDir);
} else if (!Strings.isNullOrEmpty(vault.getVaultSettings().winDriveLetter().get())) {
mountPoint.selectToggle(mountPointWinDriveLetter);
} else {
mountPoint.selectToggle(mountPointAuto);
}
}
@FXML
@@ -51,4 +112,81 @@ public class MountOptionsController implements FxController {
mountFlags.textProperty().bind(vault.defaultMountFlagsProperty());
}
}
@FXML
private void chooseCustomMountPoint() {
DirectoryChooser directoryChooser = new DirectoryChooser();
directoryChooser.setTitle(resourceBundle.getString("vaultOptions.mount.winDirChooser"));
try {
directoryChooser.setInitialDirectory(Path.of(System.getProperty("user.home")).toFile());
} catch (Exception e) {
//NO-OP
}
File file = directoryChooser.showDialog(window);
if (file != null) {
vault.getVaultSettings().individualMountPath().set(file.getAbsolutePath());
} else {
vault.getVaultSettings().individualMountPath().set(null);
}
}
private void toggleMountPoint(@SuppressWarnings("unused") ObservableValue<? extends Toggle> observable, @SuppressWarnings("unused") Toggle oldValue, Toggle newValue) {
if (mountPointCustomDir.equals(newValue) && Strings.isNullOrEmpty(vault.getVaultSettings().individualMountPath().get())) {
chooseCustomMountPoint();
}
}
/**
* Converts 'C' to "C:" to translate between model and GUI.
*/
private static class WinDriveLetterLabelConverter extends StringConverter<String> {
private final Set<String> occupiedDriveLetters;
WinDriveLetterLabelConverter(WindowsDriveLetters windowsDriveLetters) {
this.occupiedDriveLetters = windowsDriveLetters.getOccupiedDriveLetters();
}
@Override
public String toString(String driveLetter) {
if (occupiedDriveLetters.contains(driveLetter)) {
return driveLetter + ": (occupied)"; // TODO localize?
} else {
return driveLetter + ":";
}
}
@Override
public String fromString(String string) {
throw new UnsupportedOperationException();
}
}
// Getter & Setter
public BooleanProperty osIsWindowsProperty() {
return osIsWindows;
}
public boolean getOsIsWindows() {
return osIsWindows.get();
}
public BooleanBinding webDavAndWindowsProperty() {
return webDavAndWindows;
}
public boolean isWebDavAndWindows() {
return webDavAndWindows.get();
}
public StringProperty customMountPathProperty() {
return vault.getVaultSettings().individualMountPath();
}
public String getCustomMountPath() {
return vault.getVaultSettings().individualMountPath().get();
}
}
@@ -6,20 +6,18 @@ import dagger.Provides;
import dagger.multibindings.IntoMap;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.ui.changepassword.ChangePasswordComponent;
import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FXMLLoaderFactory;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxControllerKey;
import org.cryptomator.ui.common.FxmlFile;
import org.cryptomator.ui.common.FxmlScene;
import org.cryptomator.ui.mainwindow.MainWindow;
import org.cryptomator.ui.recoverykey.RecoveryKeyComponent;
import javax.inject.Named;
import javax.inject.Provider;
@@ -27,14 +25,14 @@ import java.util.Map;
import java.util.Optional;
import java.util.ResourceBundle;
@Module(subcomponents = {ChangePasswordComponent.class})
@Module(subcomponents = {ChangePasswordComponent.class, RecoveryKeyComponent.class})
abstract class VaultOptionsModule {
@Provides
@VaultOptionsWindow
@VaultOptionsScoped
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, resourceBundle);
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
}
@Provides
@@ -53,13 +51,8 @@ abstract class VaultOptionsModule {
@Provides
@FxmlScene(FxmlFile.VAULT_OPTIONS)
@VaultOptionsScoped
static Scene provideVaultOptionsScene(@VaultOptionsWindow FXMLLoaderFactory fxmlLoaders, @VaultOptionsWindow Stage window) {
Scene scene = fxmlLoaders.createScene("/fxml/vault_options.fxml");
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
scene.getAccelerators().put(cmdW, window::close);
return scene;
static Scene provideVaultOptionsScene(@VaultOptionsWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene("/fxml/vault_options.fxml");
}
// ------------------
@@ -6,11 +6,9 @@ import dagger.Provides;
import dagger.multibindings.IntoMap;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.stage.Modality;
import javafx.stage.Stage;
import org.cryptomator.ui.common.DefaultSceneFactory;
import org.cryptomator.ui.common.FXMLLoaderFactory;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.common.FxControllerKey;
@@ -29,8 +27,8 @@ abstract class WrongFileAlertModule {
@Provides
@WrongFileAlertWindow
@WrongFileAlertScoped
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, resourceBundle);
static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
}
@Provides
@@ -48,13 +46,8 @@ abstract class WrongFileAlertModule {
@Provides
@FxmlScene(FxmlFile.WRONGFILEALERT)
@WrongFileAlertScoped
static Scene provideWrongFileAlertScene(@WrongFileAlertWindow FXMLLoaderFactory fxmlLoaders, @WrongFileAlertWindow Stage window) {
Scene scene = fxmlLoaders.createScene("/fxml/wrongfilealert.fxml"); // TODO rename fxml file
KeyCombination cmdW = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
scene.getAccelerators().put(cmdW, window::close);
return scene;
static Scene provideWrongFileAlertScene(@WrongFileAlertWindow FXMLLoaderFactory fxmlLoaders) {
return fxmlLoaders.createScene("/fxml/wrongfilealert.fxml");
}
// ------------------
@@ -1 +0,0 @@
apple.applescript.AppleScriptEngineFactory
@@ -16,6 +16,10 @@
src: url('opensans-bold.ttf');
}
@font-face {
src: url('dosis-bold.ttf');
}
/*******************************************************************************
* *
* Root Styling & Colors *
@@ -76,6 +80,7 @@
INDICATOR_BG: RED_5;
PROGRESS_INDICATOR_BEGIN: GRAY_7;
PROGRESS_INDICATOR_END: GRAY_5;
PROGRESS_BAR_BG: GRAY_2;
PASSWORD_STRENGTH_INDICATOR_BG: GRAY_3;
PASSWORD_STRENGTH_INDICATOR_BG_STRENGTH_0: RED_5;
PASSWORD_STRENGTH_INDICATOR_BG_STRENGTH_1: ORANGE_5;
@@ -460,6 +465,42 @@
-fx-padding: 4px 6px 4px 0;
}
/*******************************************************************************
* *
* Text Areas *
* *
******************************************************************************/
.text-area {
-fx-cursor: default;
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BG_NORMAL;
-fx-background-insets: 0, 1px;
-fx-background-radius: 4px;
-fx-padding: 0;
}
.text-input:focused {
-fx-background-color: CONTROL_BORDER_FOCUSED, CONTROL_BG_NORMAL;
}
.text-input:disabled {
-fx-text-fill: TEXT_FILL_SECONDARY;
-fx-background-color: CONTROL_BORDER_DISABLED, CONTROL_BG_DISABLED;
}
.text-area > .scroll-pane > .scroll-bar {
-fx-padding: 2px;
}
.text-area .content {
-fx-padding: 0.2em 0.5em 0.2em 0.5em;
-fx-cursor: text;
-fx-text-fill: TEXT_FILL;
-fx-highlight-fill: PRIMARY_BG;
-fx-prompt-text-fill: TEXT_FILL_SECONDARY;
-fx-background-color: null;
}
/*******************************************************************************
* *
* Buttons *
@@ -776,3 +817,31 @@
.progress-indicator:indeterminate .segment11 {
-fx-shape:"m 14.321262,6.5816808 c -0.824944,0.3797564 -0.10368,1.8484772 0.718513,1.3544717 L 18.786514,5.9486042 C 19.644992,5.4932031 18.92648,4.1387308 18.068001,4.5941315 z";
}
/*******************************************************************************
* *
* ProgressBar *
* *
******************************************************************************/
.progress-bar {
-fx-indeterminate-bar-length: 100;
-fx-indeterminate-bar-escape: true;
-fx-indeterminate-bar-flip: true;
-fx-indeterminate-bar-animation-time: 2;
}
.progress-bar > .bar {
-fx-background-color: CONTROL_PRIMARY_BG_NORMAL;
-fx-background-radius: 4px;
-fx-padding: 0.5em;
}
.progress-bar:indeterminate > .bar {
-fx-background-color: linear-gradient(to left, transparent, CONTROL_PRIMARY_BG_NORMAL);
}
.progress-bar > .track {
-fx-background-color: PROGRESS_BAR_BG;
-fx-background-radius: 4px;
}
@@ -16,6 +16,10 @@
src: url('opensans-bold.ttf');
}
@font-face {
src: url('dosis-bold.ttf');
}
/*******************************************************************************
* *
* Root Styling & Colors *
@@ -76,6 +80,7 @@
INDICATOR_BG: RED_5;
PROGRESS_INDICATOR_BEGIN: GRAY_2;
PROGRESS_INDICATOR_END: GRAY_4;
PROGRESS_BAR_BG: GRAY_8;
PASSWORD_STRENGTH_INDICATOR_BG: GRAY_5;
PASSWORD_STRENGTH_INDICATOR_BG_STRENGTH_0: RED_5;
PASSWORD_STRENGTH_INDICATOR_BG_STRENGTH_1: ORANGE_5;
@@ -460,6 +465,42 @@
-fx-padding: 4px 6px 4px 0;
}
/*******************************************************************************
* *
* Text Areas *
* *
******************************************************************************/
.text-area {
-fx-cursor: default;
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BG_NORMAL;
-fx-background-insets: 0, 1px;
-fx-background-radius: 4px;
-fx-padding: 0;
}
.text-input:focused {
-fx-background-color: CONTROL_BORDER_FOCUSED, CONTROL_BG_NORMAL;
}
.text-input:disabled {
-fx-text-fill: TEXT_FILL_SECONDARY;
-fx-background-color: CONTROL_BORDER_DISABLED, CONTROL_BG_DISABLED;
}
.text-area > .scroll-pane > .scroll-bar {
-fx-padding: 2px;
}
.text-area .content {
-fx-padding: 0.2em 0.5em 0.2em 0.5em;
-fx-cursor: text;
-fx-text-fill: TEXT_FILL;
-fx-highlight-fill: PRIMARY_BG;
-fx-prompt-text-fill: TEXT_FILL_SECONDARY;
-fx-background-color: null;
}
/*******************************************************************************
* *
* Buttons *
@@ -776,3 +817,31 @@
.progress-indicator:indeterminate .segment11 {
-fx-shape:"m 14.321262,6.5816808 c -0.824944,0.3797564 -0.10368,1.8484772 0.718513,1.3544717 L 18.786514,5.9486042 C 19.644992,5.4932031 18.92648,4.1387308 18.068001,4.5941315 z";
}
/*******************************************************************************
* *
* ProgressBar *
* *
******************************************************************************/
.progress-bar {
-fx-indeterminate-bar-length: 100;
-fx-indeterminate-bar-escape: true;
-fx-indeterminate-bar-flip: true;
-fx-indeterminate-bar-animation-time: 2;
}
.progress-bar > .bar {
-fx-background-color: CONTROL_PRIMARY_BG_NORMAL;
-fx-background-radius: 4px;
-fx-padding: 0.5em;
}
.progress-bar:indeterminate > .bar {
-fx-background-color: linear-gradient(to left, transparent, CONTROL_PRIMARY_BG_NORMAL);
}
.progress-bar > .track {
-fx-background-color: PROGRESS_BAR_BG;
-fx-background-radius: 4px;
}
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.Circle?>
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
<?import org.cryptomator.ui.controls.FormattedLabel?>
<VBox xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="org.cryptomator.ui.addvaultwizard.AddVaultFailureExisitingController"
minWidth="400"
maxWidth="400"
minHeight="145"
spacing="12">
<padding>
<Insets topRightBottomLeft="12"/>
</padding>
<children>
<HBox spacing="12" alignment="CENTER_LEFT" VBox.vgrow="ALWAYS">
<StackPane alignment="CENTER" HBox.hgrow="NEVER">
<Circle styleClass="glyph-icon-primary" radius="24"/>
<FontAwesome5IconView styleClass="glyph-icon-white" glyph="EXCLAMATION" glyphSize="24"/>
</StackPane>
<FormattedLabel format="%addvaultwizard.existing.error" arg1="${controller.vaultName}" wrapText="true"/>
</HBox>
<VBox alignment="BOTTOM_CENTER" VBox.vgrow="ALWAYS">
<ButtonBar buttonMinWidth="120" buttonOrder="B+C">
<buttons>
<Button text="%generic.button.back" ButtonBar.buttonData="BACK_PREVIOUS" onAction="#back"/>
<Button text="%generic.button.cancel" ButtonBar.buttonData="CANCEL_CLOSE" defaultButton="true" cancelButton="true" onAction="#close"/>
</buttons>
</ButtonBar>
</VBox>
</children>
</VBox>
@@ -10,9 +10,8 @@
<?import javafx.scene.layout.Region?>
<?import javafx.scene.layout.VBox?>
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
<?import org.cryptomator.ui.controls.PasswordStrengthIndicator?>
<?import org.cryptomator.ui.controls.SecurePasswordField?>
<?import org.cryptomator.ui.controls.NiceSecurePasswordField?>
<?import org.cryptomator.ui.controls.PasswordStrengthIndicator?>
<VBox xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="org.cryptomator.ui.addvaultwizard.CreateNewVaultPasswordController"
@@ -41,7 +40,6 @@
<Label fx:id="passwordMatchLabel" styleClass="label-secondary" labelFor="$reenterField"/>
</HBox>
</VBox>
<CheckBox fx:id="finalConfirmationCheckbox" text="%addvaultwizard.new.finalConfirmation" wrapText="true"/>
<Region VBox.vgrow="ALWAYS"/>
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.Region?>
<?import javafx.scene.layout.VBox?>
<VBox xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="org.cryptomator.ui.addvaultwizard.CreateNewVaultRecoveryKeyController"
prefWidth="400"
prefHeight="400"
spacing="12"
alignment="CENTER_LEFT">
<padding>
<Insets topRightBottomLeft="24"/>
</padding>
<children>
<Region VBox.vgrow="ALWAYS"/>
<Label text="%addvaultwizard.new.recoveryKeyInstruction" wrapText="true"/>
<TextArea editable="false" text="${controller.recoveryKey}" wrapText="true"/>
<CheckBox fx:id="finalConfirmationCheckbox" text="%addvaultwizard.new.recoveryKeySavedCheckbox" wrapText="true"/>
<Region VBox.vgrow="ALWAYS"/>
<ButtonBar buttonMinWidth="120" buttonOrder="+X">
<buttons>
<Button text="%generic.button.next" ButtonBar.buttonData="NEXT_FORWARD" onAction="#next" defaultButton="true" disable="${!finalConfirmationCheckbox.selected}"/>
</buttons>
</ButtonBar>
</children>
</VBox>
@@ -3,6 +3,7 @@
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.ProgressBar?>
<?import javafx.scene.control.ProgressIndicator?>
<?import javafx.scene.layout.VBox?>
<?import org.cryptomator.ui.controls.FormattedLabel?>
@@ -23,6 +24,8 @@
<NiceSecurePasswordField fx:id="passwordField"/>
</VBox>
<ProgressBar progress="${controller.migrationProgress}" prefWidth="Infinity" visible="${controller.vault.processing}"/>
<VBox alignment="BOTTOM_CENTER" VBox.vgrow="ALWAYS">
<ButtonBar buttonMinWidth="120" buttonOrder="B+X">
<buttons>
@@ -6,10 +6,15 @@
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.ToggleGroup?>
<VBox xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="org.cryptomator.ui.preferences.GeneralPreferencesController"
spacing="6">
<fx:define>
<ToggleGroup fx:id="nodeOrientation"/>
</fx:define>
<padding>
<Insets topRightBottomLeft="12"/>
</padding>
@@ -18,6 +23,12 @@
<Label text="%preferences.general.theme"/>
<ChoiceBox fx:id="themeChoiceBox"/>
</HBox>
<HBox spacing="6" alignment="CENTER_LEFT">
<Label text="Interface Orientation" HBox.hgrow="NEVER"/>
<RadioButton fx:id="nodeOrientationLtr" text="Left to Right" alignment="CENTER_LEFT" toggleGroup="${nodeOrientation}"/>
<RadioButton fx:id="nodeOrientationRtl" text="Right to Left" alignment="CENTER_RIGHT" toggleGroup="${nodeOrientation}"/>
</HBox>
<CheckBox fx:id="startHiddenCheckbox" text="%preferences.general.startHidden"/>
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import org.cryptomator.ui.controls.FormattedLabel?>
<?import org.cryptomator.ui.controls.NiceSecurePasswordField?>
<VBox xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="org.cryptomator.ui.recoverykey.RecoveryKeyCreationController"
minWidth="400"
maxWidth="400"
minHeight="145"
spacing="12"
alignment="TOP_CENTER">
<padding>
<Insets topRightBottomLeft="12"/>
</padding>
<children>
<VBox spacing="6">
<FormattedLabel format="%recoveryKey.enterPassword.prompt" arg1="${controller.vault.displayableName}" wrapText="true"/>
<NiceSecurePasswordField fx:id="passwordField" HBox.hgrow="ALWAYS"/>
</VBox>
<VBox alignment="BOTTOM_CENTER" VBox.vgrow="ALWAYS">
<ButtonBar buttonMinWidth="120" buttonOrder="C+X">
<buttons>
<Button text="%generic.button.cancel" ButtonBar.buttonData="CANCEL_CLOSE" cancelButton="true" onAction="#close" />
<Button text="%generic.button.next" ButtonBar.buttonData="NEXT_FORWARD" defaultButton="true" onAction="#createRecoveryKey" disable="${passwordField.text.empty}"/>
</buttons>
</ButtonBar>
</VBox>
</children>
</VBox>
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.Circle?>
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
<?import org.cryptomator.ui.controls.FormattedLabel?>
<VBox xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="org.cryptomator.ui.recoverykey.RecoveryKeyDisplayController"
minWidth="400"
maxWidth="400"
minHeight="145"
maxHeight="180"
spacing="12"
alignment="TOP_CENTER">
<padding>
<Insets topRightBottomLeft="12"/>
</padding>
<children>
<HBox spacing="12" alignment="CENTER_LEFT" VBox.vgrow="ALWAYS">
<StackPane alignment="CENTER" HBox.hgrow="NEVER">
<Circle styleClass="glyph-icon-primary" radius="24"/>
<FontAwesome5IconView styleClass="glyph-icon-white" glyph="CHECK" glyphSize="24"/>
</StackPane>
<VBox spacing="6" HBox.hgrow="ALWAYS">
<FormattedLabel format="%recoveryKey.display.message" arg1="${controller.vault.displayableName}" wrapText="true" VBox.vgrow="NEVER"/>
<TextArea editable="false" text="${controller.recoveryKey}" wrapText="true" VBox.vgrow="ALWAYS"/>
</VBox>
</HBox>
<VBox alignment="BOTTOM_CENTER" VBox.vgrow="ALWAYS">
<ButtonBar buttonMinWidth="120" buttonOrder="+C">
<buttons>
<Button text="%generic.button.done" ButtonBar.buttonData="CANCEL_CLOSE" cancelButton="true" onAction="#close"/>
</buttons>
</ButtonBar>
</VBox>
</children>
</VBox>
@@ -12,9 +12,8 @@
<Insets topRightBottomLeft="24"/>
</padding>
<children>
<!-- TODO -->
<Label text="Migration disabled during Alpha"/>
<Button styleClass="button-large" text="TODO Upgrade Vault" minWidth="120" onAction="#showVaultMigrator" disable="true">
<Label text="%main.vaultDetail.migratePrompt" wrapText="true"/>
<Button styleClass="button-large" text="%main.vaultDetail.migrateButton" minWidth="120" onAction="#showVaultMigrator">
<graphic>
<FontAwesome5IconView glyph="FILE_IMPORT" glyphSize="15"/>
</graphic>
@@ -32,7 +32,7 @@
<Arc styleClass="onboarding-overlay-arc" AnchorPane.bottomAnchor="5" type="OPEN" centerX="-10" centerY="0" radiusY="100" radiusX="60" startAngle="0" length="-60" strokeWidth="1"/>
</AnchorPane>
</StackPane>
<Button styleClass="toolbar-button" text="%main.vaultlist.addVaultBtn" onAction="#didClickAddVault" alignment="BASELINE_CENTER" maxWidth="Infinity" mnemonicParsing="false">
<Button styleClass="toolbar-button" text="%main.vaultlist.addVaultBtn" onAction="#didClickAddVault" alignment="BASELINE_CENTER" maxWidth="Infinity">
<graphic>
<FontAwesome5IconView glyph="PLUS"/>
</graphic>
@@ -12,5 +12,6 @@
</padding>
<children>
<Button text="%vaultOptions.general.changePasswordBtn" onAction="#changePassword"/>
<Button text="%vaultOptions.general.showRecoveryKeyBtn" onAction="#showRecoveryKey"/>
</children>
</VBox>
@@ -1,16 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ToggleGroup?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Text?>
<?import org.cryptomator.ui.controls.AlphanumericTextField?>
<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
<VBox xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="org.cryptomator.ui.vaultoptions.MountOptionsController"
spacing="6">
<fx:define>
<ToggleGroup fx:id="mountPoint"/>
</fx:define>
<padding>
<Insets topRightBottomLeft="12"/>
</padding>
@@ -32,6 +41,26 @@
</children>
</HBox>
<!-- TODO windows drive letter, see https://github.com/cryptomator/cryptomator/blob/1.4.16/main/ui/src/main/java/org/cryptomator/ui/model/Vault.java#L283-L298 -->
<Text text="TODO Mount Point"/>
<RadioButton toggleGroup="${mountPoint}" fx:id="mountPointAuto" text="TODO Automatically pick a suitable location"/>
<HBox spacing="6" visible="${controller.osIsWindows}" managed="${controller.osIsWindows}">
<RadioButton toggleGroup="${mountPoint}" fx:id="mountPointWinDriveLetter" text="TODO Choose specific drive letter"/>
<ChoiceBox fx:id="driveLetterSelection" disable="${!mountPointWinDriveLetter.selected}"/>
</HBox>
<RadioButton toggleGroup="${mountPoint}" fx:id="mountPointCustomDir" text="TODO Choose empty directory"/>
<HBox visible="${mountPointCustomDir.selected}">
<padding>
<Insets left="24"/>
</padding>
<children>
<TextField text="${controller.customMountPath}" HBox.hgrow="ALWAYS" maxWidth="Infinity" disable="true"/>
<Button text="TODO change" onAction="#chooseCustomMountPoint" contentDisplay="LEFT">
<graphic>
<FontAwesome5IconView glyph="FOLDER_OPEN" glyphSize="15"/>
</graphic>
</Button>
</children>
</HBox>
</children>
</VBox>
File diff suppressed because it is too large Load Diff
@@ -1,3 +1,6 @@
# Locale Specific CSS files such as CJK, RTL,...
additionalStyleSheets=
# Generics
## Button
generic.button.apply=Apply
@@ -21,8 +24,10 @@ addvaultwizard.title=Add Vault
addvaultwizard.welcome.newButton=Create New Vault
addvaultwizard.welcome.existingButton=Open Existing Vault
## New
### Name
addvaultwizard.new.nameInstruction=Choose a name for the vault
addvaultwizard.new.namePrompt=Vault Name
### Location
addvaultwizard.new.locationInstruction=Where should Cryptomator store the encrypted files of your vault?
addvaultwizard.new.locationLabel=Storage location
addvaultwizard.new.locationPrompt=
@@ -32,11 +37,16 @@ addvaultwizard.new.directoryPickerTitle=Select Directory
addvaultwizard.new.enterPassword=Enter a password for the vault
addvaultwizard.new.fileAlreadyExists=Vault can not be created at this path because some object already exists.
addvaultwizard.new.invalidName=Invalid vault name. Please consider a regular directory name.
addvaultwizard.new.ioException=Selected directory failed a basic test. Make sure to have the appropriate access rights and nothing interferes with Cryptomator.
### Password
addvaultwizard.new.reenterPassword=Confirm the password
addvaultwizard.new.passwordsMatch=Passwords match!
addvaultwizard.new.passwordsDoNotMatch=Passwords do not match
addvaultwizard.new.finalConfirmation=I understand that I will not be able to recover my data if I forget my password
addvaultwizard.new.createVaultBtn=Create Vault
### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=This is your recovery key. Keep it safe, it is your only chance to recover your data if you lose your password.
addvaultwizard.new.recoveryKeySavedCheckbox=Yes, I've made a secure backup of this recovery key
### Information
addvault.new.readme.storageLocation.fileName=WHAT IS THIS DIRECTORY.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ VAULT FILES ⚠️
addvault.new.readme.storageLocation.2=This is your vault's storage location. {\\b DO NOT} alter any files within this directory.
@@ -50,6 +60,7 @@ addvault.new.readme.accessLocation.3=Feel free to remove this file.
addvaultwizard.existing.instruction=Choose the "masterkey.cryptomator" file of your existing vault.
addvaultwizard.existing.chooseBtn=Choose…
addvaultwizard.existing.filePickerTitle=Select Masterkey File
addvaultwizard.existing.error=Unable to add vault "%s": Not a valid vault. Please look into the log for more information.
## Success
addvaultwizard.success.nextStepsInstructions=Added vault "%s".\nYou need to unlock this vault to access or add contents. Alternatively you can unlock it at any later point in time.
addvaultwizard.success.unlockNow=Unlock Now
@@ -121,10 +132,12 @@ main.vaultlist.emptyList.onboardingInstruction=Click here to add a vault
main.vaultlist.contextMenu.remove=Remove Vault
main.vaultlist.addVaultBtn=Add Vault
## Vault Detail
### Locked
main.vaultDetail.lockedStatus=LOCKED
main.vaultDetail.unlockedStatus=UNLOCKED
main.vaultDetail.unlockBtn=Unlock
main.vaultDetail.optionsBtn=Vault Options
### Unlocked
main.vaultDetail.unlockedStatus=UNLOCKED
main.vaultDetail.accessLocation=Your vault's contents are accessible here:
main.vaultDetail.revealBtn=Reveal Drive
main.vaultDetail.lockBtn=Lock
@@ -133,6 +146,9 @@ main.vaultDetail.bytesPerSecondWritten=written:
main.vaultDetail.throughput.idle=idle
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Needs Migration
main.vaultDetail.migrateButton=Upgrade Vault
main.vaultDetail.migratePrompt=Your vault needs to be upgraded to a new format, before you can access it
# Wrong File Alert
wrongFileAlert.title=Unknown File
@@ -140,12 +156,22 @@ wrongFileAlert.btn=Okay
wrongFileAlert.information=You have tried to add a file or folder that does not seem to be a Cryptomator vault. To encrypt your data, create and unlock a vault.
# Vault Options
## General
vaultOptions.general=General
vaultOptions.general.changePasswordBtn=Change Password
vaultOptions.general.showRecoveryKeyBtn=Display Recovery Key
## Mount
vaultOptions.mount=Mounting
vaultOptions.mount.readonly=Read-Only
vaultOptions.mount.driveName=Drive Name
vaultOptions.mount.customMountFlags=Custom Mount Flags
vaultOptions.mount.winDriveLetterOccupied=occupied
vaultOptions.mount.winDirChooser=Pick an empty directory
# Recovery Key
recoveryKey.title=Recovery Key
recoveryKey.enterPassword.prompt=Enter your password to show the recovery key for "%s":
recoveryKey.display.message=Recovery Key for "%s":
# Misc
passwordStrength.messageLabel.0=Very weak
@@ -0,0 +1,116 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=طبّق
generic.button.back=الى الوراء
generic.button.cancel=الغاء
generic.button.change=تغيير
generic.button.done=تم
generic.button.next=التالي
# Tray Menu
traymenu.showMainWindow=اظهار
traymenu.showPreferencesWindow=تفضيلات
traymenu.quitApplication=انهاء
traymenu.vault.unlock=افتح
traymenu.vault.lock=قفل
traymenu.vault.reveal=إظهار
# Add Vault Wizard
addvaultwizard.title=أضِف مخزنًا
## Welcome
addvaultwizard.welcome.newButton=إنشاء مخزن جديد
addvaultwizard.welcome.existingButton=افتح مخزن موجود
## New
### Name
addvaultwizard.new.nameInstruction=اختر اسم للمخزن
addvaultwizard.new.namePrompt=اسم المخزن
### Location
addvaultwizard.new.locationInstruction=أين يجب على Cryptomator تخزين الملفات المشفرة من قبو الخاص بك؟
addvaultwizard.new.locationLabel=موقع التخزين
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=موقع مخصص
addvaultwizard.new.directoryPickerButton=اختر…
addvaultwizard.new.directoryPickerTitle=اختر القاموس
addvaultwizard.new.enterPassword=أدخل كلمة المرور لهذا الحساب
addvaultwizard.new.fileAlreadyExists=لا يمكن إنشاء مخزن على هذا المسار لأن بعض الملفات موجودة مسبقا.
addvaultwizard.new.invalidName=اسم المخزن غير صالح. يرجى النظر في اسم الدليل المعتاد.
### Password
addvaultwizard.new.reenterPassword=تأكيد كلمة المرور
addvaultwizard.new.passwordsMatch=كلمات المرور متطابقة!
addvaultwizard.new.passwordsDoNotMatch=كلمات المرور غير متطابقة
addvaultwizard.new.createVaultBtn=انشئ حافظة
### Recovery Key
### Information
addvault.new.readme.storageLocation.4=لو انك تحتاج مساعدة, جرب "%s".
## Existing
addvaultwizard.existing.chooseBtn=اختر…
## Success
# Remove Vault
removeVault.confirmBtn=احذف الحافظة
# Change Password
changepassword.enterNewPassword=ادخل كلمة المرور الجديدة لحافظتك
changepassword.reenterNewPassword=تأكيد كلمة المرور الجديدة
changepassword.passwordsMatch=كلمات المرور متطابقة!
changepassword.passwordsDoNotMatch=كلمات المرور غير متطابقة
# Forget Password
forgetPassword.title=نسيت كلمة المرور
forgetPassword.confirmBtn=نسيت كلمة المرور
# Unlock
unlock.title=افتح الحافظة
unlock.savePassword=احفظ كلمة المرور
unlock.unlockBtn=افتح
## Success
unlock.success.revealBtn=افتح الحافظة
# Migration
migration.title=ترقية الحافظة
## Start
migration.start.confirm=نعم, محفظتي متزامنة بالكامل
## Run
migration.run.startMigrationBtn=ترقية الحافظة
## Sucess
migration.success.unlockNow=افتح الان
# Preferences
preferences.title=تفضيلات
## General
preferences.general=عام
## Volume
preferences.volume.webdav.port=منفذ WebDav
## Updates
preferences.updates=تحديثات
preferences.updates.autoUpdateCheck=تحقق من التحديثات اوتوماتيكيا
preferences.updates.checkNowBtn=تحقق الان
# Main Window
main.preferencesBtn.tooltip=تفضيلات
## Vault List
main.vaultlist.addVaultBtn=أضِف مخزنًا
## Vault Detail
### Locked
main.vaultDetail.lockedStatus=مغلق
main.vaultDetail.unlockBtn=افتح
### Unlocked
main.vaultDetail.unlockedStatus=مفتوح
main.vaultDetail.lockBtn=قفل
### Needs Migration
main.vaultDetail.migrateButton=ترقية الحافظة
# Wrong File Alert
# Vault Options
## General
vaultOptions.general=عام
## Mount
# Recovery Key
# Misc
# Quit
@@ -0,0 +1,180 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=Použít
generic.button.back=Zpět
generic.button.cancel=Zrušit
generic.button.change=Změnit
generic.button.done=Hotovo
generic.button.next=Další
# Tray Menu
traymenu.showMainWindow=Zobrazit
traymenu.showPreferencesWindow=Nastavení
traymenu.quitApplication=Ukončit
traymenu.vault.unlock=Odemknout
traymenu.vault.lock=Zamknout
traymenu.vault.reveal=Zobrazit
# Add Vault Wizard
addvaultwizard.title=Přidat trezor
## Welcome
addvaultwizard.welcome.newButton=Vytvořit nový trezor
addvaultwizard.welcome.existingButton=Otevřít existující trezor
## New
### Name
addvaultwizard.new.nameInstruction=Zvolte jméno trezoru
addvaultwizard.new.namePrompt=Jméno trezoru
### Location
addvaultwizard.new.locationInstruction=Kde by měl Cryptomator ukládat šifrované soubory vašeho trezoru?
addvaultwizard.new.locationLabel=Umístění úložiště
addvaultwizard.new.locationPrompt=...
addvaultwizard.new.directoryPickerLabel=Vlastní umístění
addvaultwizard.new.directoryPickerButton=Vybrat...
addvaultwizard.new.directoryPickerTitle=Vyberte adresář
addvaultwizard.new.enterPassword=Zadejte heslo pro trezor
addvaultwizard.new.fileAlreadyExists=Trezor nemůže být vytvořen na tomto umístění, protože stejný objekt již existuje.
addvaultwizard.new.invalidName=Neplatné jméno trezoru. Prosím změňte jméno adresáře.
### Password
addvaultwizard.new.reenterPassword=Potvrďte heslo
addvaultwizard.new.passwordsMatch=Hesla se shodují!
addvaultwizard.new.passwordsDoNotMatch=Hesla se neshodují
addvaultwizard.new.createVaultBtn=Vytvořit trezor
### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=Toto je tvůj obnovovací klíč. Uchovej jej v bezpečí, je to jediná šance, jak obnovit data, pokud ztratíš heslo.
### Information
addvault.new.readme.storageLocation.fileName=CO JE TOTO ZA ADRESÁŘ.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ OBSAH TREZORU ⚠️
addvault.new.readme.storageLocation.2=Toto je umístění vašeho trezoru. NEMĚŇTE žádné soubory uvnitř adresáře.
addvault.new.readme.storageLocation.3=Pokud chcete zašifrovat soubory pomocí Cryptomatoru, odemkněte trezor a použijte přidělený disk.
addvault.new.readme.storageLocation.4=Pokud potřebujete pomoc, zkuste %s.
addvault.new.readme.accessLocation.fileName=Vítej ve svém novém trezoru.rtf
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ ZAŠIFROVANÁ JEDNOTKA 🔐️
addvault.new.readme.accessLocation.2=Toto je přístup k vašemu trezoru. Všechny soubory přidané do této jednotky budou šifrovány pomocí Cryptomatoru. Pro přístup k této jednotce kdykoliv v budoucnu ji jednoduše opět odemkněte pomocí Cryptomatoru.
addvault.new.readme.accessLocation.3=Tento soubor můžete odstranit.
## Existing
addvaultwizard.existing.instruction=Vyberte soubor "masterkey.cryptomator" z vašeho stávajícího trezoru.
addvaultwizard.existing.chooseBtn=Vybrat...
addvaultwizard.existing.filePickerTitle=Vyberte Masterkey soubor
## Success
addvaultwizard.success.nextStepsInstructions=Vytvořen trezor "%s".\nNejprve odemkněte tento trezor, pak do něj můžete přidat svůj obsah. Nebo jej můžete odemknout kdykoliv v budoucnu.
addvaultwizard.success.unlockNow=Odemknout nyní
# Remove Vault
removeVault.title=Odstranit trezor
removeVault.information=Toto jen umožní Cryptomatoru zapomenout tento trezor. Později jej můžete opět přidat. Žádné šifrované soubory nebudou z vašeho disku smazány.
removeVault.confirmBtn=Odstranit trezor
# Change Password
changepassword.title=Změnit heslo
changepassword.enterOldPassword=Zadejte současné heslo pro "%s"
changepassword.enterNewPassword=Zadejte nové heslo pro váš trezor
changepassword.reenterNewPassword=Potvrď nové heslo
changepassword.passwordsMatch=Hesla se shodují!
changepassword.passwordsDoNotMatch=Hesla se neshodují
changepassword.finalConfirmation=UPOZORNĚNÍ: Pokud heslo zapomenete/ztratíte, nenávratně příjdete o přístup ke svému obsahu!
# Forget Password
forgetPassword.title=Zapomenout heslo
forgetPassword.information=Toto smaže uložené heslo pro tento trezor.
forgetPassword.confirmBtn=Zapomenout heslo
# Unlock
unlock.title=Odemknout trezor
unlock.passwordPrompt=Zadejte heslo pro "%s":
unlock.savePassword=Uložit heslo
unlock.unlockBtn=Odemknout
## Success
unlock.success.message=Trezor "%s" byl úspěšně odemčen a nyní je dostupný.
unlock.success.revealBtn=Zobrazit trezor
# Migration
migration.title=Upgrade trezoru
## Start
migration.start.prompt=Váš trezor "%s" musí být aktualizován na nový formát.\nNež začnete, ujistěte se, že není žádná probíhající či čekající synchronizace na tomto trezoru.
migration.start.confirm=Ano, můj trezor je plně synchronizován.
## Run
migration.run.enterPassword=Zadejte heslo pro "%s"
migration.run.startMigrationBtn=Migrovat trezor
## Sucess
migration.success.nextStepsInstructions=Migrace "%s" byla úspěšná.\nNyní můžete svůj trezor odemknout.
migration.success.unlockNow=Odemknout nyní
# Preferences
preferences.title=Nastavení
## General
preferences.general=Obecné
preferences.general.theme=Vzhled
preferences.general.startHidden=Skrýt okno Cryptomatoru při spuštění
preferences.general.debugLogging=Ladicí režim
## Volume
preferences.volume=Virtuální jednotky
preferences.volume.type=Typ připojení
preferences.volume.webdav.port=WebDAV Port
preferences.volume.webdav.scheme=WebDAV schéma
## Updates
preferences.updates=Aktualizace
preferences.updates.currentVersion=Aktuální verze: %s
preferences.updates.autoUpdateCheck=Automaticky kontrolovat aktualizace
preferences.updates.checkNowBtn=Zkontrolovat nyní
preferences.updates.updateAvailable=Dostupná nová verze %s.
# Main Window
main.closeBtn.tooltip=Zavřít
main.preferencesBtn.tooltip=Nastavení
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Klikněte sem pro přidání nového trezoru
main.vaultlist.contextMenu.remove=Odstranit trezor
main.vaultlist.addVaultBtn=Přidat trezor
## Vault Detail
### Locked
main.vaultDetail.lockedStatus=UZAMKNUTO
main.vaultDetail.unlockBtn=Odemknout
main.vaultDetail.optionsBtn=Možnosti trezoru
### Unlocked
main.vaultDetail.unlockedStatus=ODEMKNUTO
main.vaultDetail.accessLocation=Obsah vašeho trezoru je dostupný:
main.vaultDetail.revealBtn=Zobrazit jednotku
main.vaultDetail.lockBtn=Zamknout
main.vaultDetail.bytesPerSecondRead=přečteno:
main.vaultDetail.bytesPerSecondWritten=zapsáno:
main.vaultDetail.throughput.idle=nečinný
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Needs Migration
main.vaultDetail.migrateButton=Upgrade trezoru
# Wrong File Alert
wrongFileAlert.title=neznámý soubor
wrongFileAlert.btn=OK
wrongFileAlert.information=Zkoušíte přidat soubor či adresář, který zřejmě není trezorem Cryptomatoru. Pro zašifrování vašich dat vytvořte a odemkněte trezor.
# Vault Options
## General
vaultOptions.general=Obecné
vaultOptions.general.changePasswordBtn=Změnit heslo
vaultOptions.general.showRecoveryKeyBtn=Zobrazit klíč k obnově
## Mount
vaultOptions.mount=Připojení
vaultOptions.mount.readonly=Pouze pro čtení
vaultOptions.mount.driveName=Jméno jednotky
vaultOptions.mount.customMountFlags=Vlastní parametry
vaultOptions.mount.winDriveLetterOccupied=obsazené
vaultOptions.mount.winDirChooser=Vyberte prázdný adresář
# Recovery Key
recoveryKey.title=Klíč k obnově
recoveryKey.enterPassword.prompt=Zadejte své heslo pro zobrazení obnovovacího klíče pro "%s":
recoveryKey.display.message=Klíč k obnově "%s":
# Misc
passwordStrength.messageLabel.0=velmi slabé
passwordStrength.messageLabel.1=slabé
passwordStrength.messageLabel.2=dostatečné
passwordStrength.messageLabel.3=silné
passwordStrength.messageLabel.4=velmi silné
# Quit
quit.prompt=Uzavřít aplikaci? Máte nezamčené trezory.
quit.lockAndQuit=Uzamknout a zavřít
@@ -1,3 +1,5 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=Übernehmen
@@ -21,69 +23,94 @@ addvaultwizard.title=Tresor hinzufügen
addvaultwizard.welcome.newButton=Neuen Tresor erstellen
addvaultwizard.welcome.existingButton=Existierenden Tresor öffnen
## New
### Name
addvaultwizard.new.nameInstruction=Wähle einen Namen für den Tresor
addvaultwizard.new.namePrompt=Tresorname
### Location
addvaultwizard.new.locationInstruction=Wo soll Cryptomator die verschlüsselten Daten deines Tresors ablegen?
addvaultwizard.new.locationLabel=Speicherort
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Eigenen Ort wählen…
addvaultwizard.new.directoryPickerButton=Durchsuchen…
addvaultwizard.new.directoryPickerLabel=Eigener Ort
addvaultwizard.new.directoryPickerButton=Durchsuchen 
addvaultwizard.new.directoryPickerTitle=Wähle ein Verzeichnis
addvaultwizard.new.enterPassword=Vergib ein Passwort für den Tresor
addvaultwizard.new.fileAlreadyExists=Der Tresor konnte nicht erstellt werden, da der Speicherort bereits belegt ist.
addvaultwizard.new.invalidName=Ungültiger Tresorname. Tresore müssen wie Verzeichnisse benannt werden.
addvaultwizard.new.ioException=Auf das ausgewählte Verzeichnis kann nicht zugegriffen werden. Prüfe die Zugriffsrechte und stelle sicher, dass Cryptomator nicht von einer anderen Anwendung blockiert wird.
### Password
addvaultwizard.new.reenterPassword=Bestätige das Passwort
addvaultwizard.new.passwordsMatch=Passwörter stimmen überein!
addvaultwizard.new.passwordsDoNotMatch=Passwörter stimmen nicht überein
addvaultwizard.new.finalConfirmation=Mir ist bewusst, dass ich den Tresor ohne das Passwort NICHT mehr öffnen kann.
addvaultwizard.new.createVaultBtn=Tresor erstellen
### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=Dies ist dein Wiederherstellungsschlüssel. Bewahre ihn sicher auf. Ohne ihn gibt es keine Möglichkeit deine Daten wiederherzustellen, wenn du dein Kennwort verloren hast.
addvaultwizard.new.recoveryKeySavedCheckbox=Ja, ich habe eine Datensicherung dieses Wiederherstellungsschlüssels durchgeführt
### Information
addvault.new.readme.storageLocation.fileName=WAS BEDEUTET DIESER ORDNER.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ TRESORDATEIEN ⚠️
addvault.new.readme.storageLocation.2=Dies ist der Speicherort deines Tresor. Ändere {\\b KEINE} Dateien in diesem Verzeichnis.
addvault.new.readme.storageLocation.2=Dies ist der Speicherort deines Tresors. Ändere {\\b KEINE} Dateien in diesem Verzeichnis.
addvault.new.readme.storageLocation.3=Wenn du Dateien mit Cryptomator verschlüsseln möchtest, entsperre den Tresor und verwende das zur Verfügung gestellte Laufwerk.
addvault.new.readme.storageLocation.4=Wenn du Hilfe brauchst, versuche %s.
addvault.new.readme.storageLocation.4=Falls du Hilfe brauchst, versuche %s.
addvault.new.readme.accessLocation.fileName=WILLKOMMEN ZUM TRESOR.rtf
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ VERSCHLÜSSELTES LAUFWERK 🔐️
addvault.new.readme.accessLocation.2=Dies ist dein Tresorlaufwerk. Alle Dateien, die zu diesem Laufwerk hinzugefügt werden, werden mit Cryptomator verschlüsselt. Um zu einem späteren Zeitpunkt auf dieses Laufwerk zuzugreifen, entsperre es einfach wieder aus der Cryptomator-Anwendung heraus.
addvault.new.readme.accessLocation.2=Dies ist dein Tresorlaufwerk. Alle zu diesem Laufwerk hinzugefügten Dateien werden mit Cryptomator verschlüsselt. Um zu einem späteren Zeitpunkt auf dieses Laufwerk zuzugreifen, entsperre es einfach wieder aus der Cryptomator-Anwendung heraus.
addvault.new.readme.accessLocation.3=Diese Datei kannst du löschen.
## Existing
addvaultwizard.existing.instruction=Bitte wähle die Datei "masterkey.cryptomator" des exsitierenden Tresors aus.
addvaultwizard.existing.chooseBtn=Dursuchen…
addvaultwizard.existing.instruction=Wähle die Datei masterkey.cryptomator deines vorhandenen Tresors aus.
addvaultwizard.existing.chooseBtn=Durchsuchen…
addvaultwizard.existing.filePickerTitle=Masterkey-Datei auswählen
addvaultwizard.existing.error=Der Tresor „%s“ ist kein gültiger Tresor und kann nicht hinzugefügt werden. Weitere Informationen findest du im Diagnoseprotokoll.
## Success
addvaultwizard.success.nextStepsInstructions=Tresor "%s" hinzugefügt.\nEntsperre diesen Tresor jetzt, um auf die Inhalte zugreifen oder welche hinzufügen zu können. Andernfalls entsperre diesen Tresor zu einem späteren Zeitpunkt.
addvaultwizard.success.nextStepsInstructions=Tresor %s hinzugefügt.\nUm auf Inhalte zuzugreifen oder welche hinzuzufügen, musst du den Tresor entsperren. Du kannst ihn aber auch zu jedem späteren Zeitpunkt entsperren.
addvaultwizard.success.unlockNow=Jetzt entsperren
# Remove Vault
removeVault.title=Tresor entfernen
removeVault.information=Dein Tresor wird nicht gelöscht, er wird lediglich aus der Liste entfernt. Falls du dich später umentscheidest, kannst du ihn später einfach wieder hinzufügen.
removeVault.information=Dein Tresor wird nicht gelöscht, sondern lediglich aus Cryptomators Tresorliste entfernt. Du kannst ihn daher später jederzeit wieder hinzufügen.
removeVault.confirmBtn=Tresor entfernen
# Change Password
changepassword.title=Password ändern
changepassword.enterOldPassword=Gib dein altes Passwort ein
changepassword.enterNewPassword=Vergib ein neues Passwort
changepassword.enterOldPassword=Gib dein derzeitiges Passwort für "%s" ein
changepassword.enterNewPassword=Gib ein neues Tresorpasswort ein
changepassword.reenterNewPassword=Bestätige das neue Passwort
changepassword.passwordsMatch=Passwörter stimmen überein!
changepassword.passwordsDoNotMatch=Passwörter stimmen nicht überein
changepassword.finalConfirmation=Mir ist bewusst, dass ich den Tresor ohne das Passwort NICHT mehr öffnen kann.
changepassword.finalConfirmation=Mir ist bewusst, dass ich den Tresor ohne das Passwort NICHT mehr öffnen kann
# Forget Password
forgetPassword.title=Passwort vergessen
forgetPassword.information=Dies löscht das gespeicherte Passwort dieses Tresors aus dem Schlüsselbund deines Betriebssystems.
forgetPassword.confirmBtn=Passwort vergessen
# Unlock
unlock.title=Tresor öffnen
unlock.passwordPrompt=Gib das Passwort für den Tresor "%s" ein
unlock.title=Tresor entsperren
unlock.passwordPrompt=Gib das Passwort für "%s" ein:
unlock.savePassword=Passwort speichern
unlock.unlockBtn=Entsperren
## Success
unlock.success.message="%s" erfolgreich ensperrt!
unlock.success.message="%s" erfolgreich entsperrt!
unlock.success.revealBtn=Tresor anzeigen
# Migration
migration.title=Tresor aktualisieren
## Start
migration.start.prompt=Dein Tresor „%s“ muss auf ein neueres Format aktualisiert werden. Stell bitte zuvor sicher, dass dieser Tresor vollständig synchronisiert ist.
migration.start.confirm=Ja, mein Tresor ist vollständig synchronisiert
## Run
migration.run.enterPassword=Gib das Passwort für „%s“ ein
migration.run.startMigrationBtn=Tresor migrieren
## Sucess
migration.success.nextStepsInstructions=„%s“ erfolgreich migriert.\nDu kannst deinen Tresor jetzt entsperren.
migration.success.unlockNow=Jetzt entsperren
# Preferences
preferences.title=Einstellungen
## General
preferences.general=Allgemein
preferences.general.theme=Look & Feel
preferences.general.theme=Erscheinungsbild
preferences.general.startHidden=Cryptomator im Hintergrund starten
preferences.general.debugLogging=Debug-Protokollierung
preferences.general.debugLogging=Diagnoseprotokoll aktivieren
## Volume
preferences.volume=Tresorlaufwerk
preferences.volume.type=Laufwerkstyp
@@ -93,7 +120,7 @@ preferences.volume.webdav.scheme=WebDAV-Schema
preferences.updates=Updates
preferences.updates.currentVersion=Aktuelle Version: %s
preferences.updates.autoUpdateCheck=Automatisch nach Updates suchen
preferences.updates.checkNowBtn=Jetzt prüfen
preferences.updates.checkNowBtn=Jetzt suchen
preferences.updates.updateAvailable=Update auf Version %s verfügbar.
# Main Window
@@ -101,30 +128,49 @@ main.closeBtn.tooltip=Schließen
main.preferencesBtn.tooltip=Einstellungen
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Klicke hier, um einen Tresor hinzuzufügen
main.vaultlist.contextMenu.add=Tresor hinzufügen
main.vaultlist.contextMenu.remove=Tresor entfernen
main.vaultlist.addVaultBtn=Tresor hinzufügen
## Vault Detail
### Locked
main.vaultDetail.lockedStatus=GESPERRT
main.vaultDetail.unlockedStatus=ENTSPERRT
main.vaultDetail.unlockBtn=Entsperren
main.vaultDetail.optionsBtn=Tresoroptionen
### Unlocked
main.vaultDetail.unlockedStatus=ENTSPERRT
main.vaultDetail.accessLocation=Dein Tresorinhalt ist hier erreichbar:
main.vaultDetail.revealBtn=Laufwerk anzeigen
main.vaultDetail.lockBtn=Sperren
main.vaultDetail.bytesPerSecondRead=gelesen:
main.vaultDetail.bytesPerSecondWritten=geschrieben:
main.vaultDetail.throughput.idle=idle
main.vaultDetail.throughput.idle=Leerlauf
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Needs Migration
main.vaultDetail.migrateButton=Tresor aktualisieren
main.vaultDetail.migratePrompt=Dein Tresor muss auf ein neues Format aktualisiert werden, bevor Du auf ihn zugreifen kannst
# Wrong File Alert
wrongFileAlert.title=Unbekannte Datei
wrongFileAlert.btn=OK
wrongFileAlert.information=Du hast versucht, eine Datei oder einen Ordner hinzuzufügen, der scheinbar kein Cryptomator-Tresor ist. Um Dateien zu verschlüsseln, erstelle und entsperre einen Tresor.
# Vault Options
## General
vaultOptions.general=Allgemein
vaultOptions.general.changePasswordBtn=Passwort ändern
vaultOptions.general.showRecoveryKeyBtn=Wiederherstellungsschlüssel anzeigen
## Mount
vaultOptions.mount=Laufwerk
vaultOptions.mount.readonly=Schreibgeschützt
vaultOptions.mount.driveName=Laufwerksname
vaultOptions.mount.customMountFlags=Benutzerdefinierte Mount-Flags
vaultOptions.mount.winDriveLetterOccupied=belegt
vaultOptions.mount.winDirChooser=Wähle ein leeres Verzeichnis
# Recovery Key
recoveryKey.title=Wiederherstellungsschlüssel
recoveryKey.enterPassword.prompt=Gib dein Kennwort ein, um den Wiederherstellungsschlüssel für „%s“ anzuzeigen:
recoveryKey.display.message=Wiederherstellungsschlüssel für „%s“:
# Misc
passwordStrength.messageLabel.0=Sehr schwach
@@ -0,0 +1,55 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
# Tray Menu
# Add Vault Wizard
## Welcome
## New
### Name
### Location
### Password
### Recovery Key
### Information
## Existing
## Success
# Remove Vault
# Change Password
# Forget Password
# Unlock
## Success
# Migration
## Start
## Run
## Sucess
# Preferences
## General
## Volume
## Updates
# Main Window
## Vault List
## Vault Detail
### Locked
### Unlocked
### Needs Migration
# Wrong File Alert
# Vault Options
## General
## Mount
# Recovery Key
# Misc
# Quit
@@ -0,0 +1,184 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=Aplicar
generic.button.back=Volver
generic.button.cancel=Cancelar
generic.button.change=Modificar
generic.button.done=Hecho
generic.button.next=Continuar
# Tray Menu
traymenu.showMainWindow=Mostrar
traymenu.showPreferencesWindow=Preferencias
traymenu.quitApplication=Salir
traymenu.vault.unlock=Desbloquear
traymenu.vault.lock=Bloquear
traymenu.vault.reveal=Revelar
# Add Vault Wizard
addvaultwizard.title=Añadir bóveda
## Welcome
addvaultwizard.welcome.newButton=Crear bóveda nueva
addvaultwizard.welcome.existingButton=Abrir bóveda existente
## New
### Name
addvaultwizard.new.nameInstruction=Elegir un nombre para la bóveda
addvaultwizard.new.namePrompt=Nombre de la bóveda
### Location
addvaultwizard.new.locationInstruction=¿Dónde se deben almacenar los archivos cifrados de la bóveda?
addvaultwizard.new.locationLabel=Lugar de almacenamiento
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Ubicación personalizada
addvaultwizard.new.directoryPickerButton=Elegir…
addvaultwizard.new.directoryPickerTitle=Seleccionar directorio
addvaultwizard.new.enterPassword=Ingresar una contraseña para la bóveda
addvaultwizard.new.fileAlreadyExists=La bóveda no puede crearse en esta ruta porque ya existe un objeto.
addvaultwizard.new.invalidName=Nombre de bóveda inválido. Considere un nombre de directorio regular.
addvaultwizard.new.ioException=El directorio seleccionado falló una prueba básica. Asegúrese de tener los derechos de acceso apropiados y que nada interfiere con Cryptomator.
### Password
addvaultwizard.new.reenterPassword=Confirmar la contraseña
addvaultwizard.new.passwordsMatch=¡Las contraseñas coinciden!
addvaultwizard.new.passwordsDoNotMatch=Las contraseñas no coinciden
addvaultwizard.new.createVaultBtn=Crear bóveda
### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=Esta es la clave de recuperación. Se debe mantener segura, es la única oportunidad de recuperar los datos si se pierde la contraseña.
addvaultwizard.new.recoveryKeySavedCheckbox=Sí, he hecho una copia de seguridad de esta clave de recuperación
### Information
addvault.new.readme.storageLocation.fileName=QUÉ ES ESTE DIRECTORIO.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ ARCHIVOS DE LA BÓVEDA ⚠️
addvault.new.readme.storageLocation.2=Esta es la ubicación del almacenamiento de su bóveda. {\\b NO} altere ningún archivo dentro de este directorio.
addvault.new.readme.storageLocation.3=Si se desea cifrar archivos usando Cryptomator, desbloquear la bóveda y utilizar la unidad proporcionada.
addvault.new.readme.storageLocation.4=Si se necesita ayuda, probar %s.
addvault.new.readme.accessLocation.fileName=BIENVENIDO A SU BÓVEDA.rtf
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ VOLUMEN CIFRADO 🔐️
addvault.new.readme.accessLocation.2=Esta es el lugar de acceso de la bóveda. Cualquier archivo añadido a este volumen será cifrado por Cryptomator. Para acceder a este volumen en otro momento, es necesario desbloquearlo otra vez desde la aplicación de Cryptomator.
addvault.new.readme.accessLocation.3=No dude en eliminar este archivo.
## Existing
addvaultwizard.existing.instruction=Elegir el archivo "masterkey.cryptomator" de la bóveda existente.
addvaultwizard.existing.chooseBtn=Elegir…
addvaultwizard.existing.filePickerTitle=Seleccionar archivo Masterkey
addvaultwizard.existing.error=No se puede añadir la bóveda "%s": No es una bóveda válida. Verificar el registro para más información.
## Success
addvaultwizard.success.nextStepsInstructions=Bóveda "%s" añadida.\nSe necesita desbloquear esta bóveda para acceder o añadir contenido. Alternativamente se \n puede desbloquear en otro momento.
addvaultwizard.success.unlockNow=Desbloquear ahora
# Remove Vault
removeVault.title=Eliminar bóveda
removeVault.information=Esto sólo hará que Cryptomator olvide la bóveda. Se la puede añadir de nuevo más tarde. Los archivos cifrados no se eliminarán del disco duro.
removeVault.confirmBtn=Eliminar bóveda
# Change Password
changepassword.title=Cambiar contraseña
changepassword.enterOldPassword=Ingresar la contraseña actual para "%s"
changepassword.enterNewPassword=Ingresar una contraseña nueva para la bóveda
changepassword.reenterNewPassword=Confirmar la contraseña nueva
changepassword.passwordsMatch=¡Las contraseñas coinciden!
changepassword.passwordsDoNotMatch=Las contraseñas no coinciden
changepassword.finalConfirmation=Entiendo que no podré recuperar mis datos si olvido mi contraseña
# Forget Password
forgetPassword.title=Olvidar contraseña
forgetPassword.information=Esto eliminará la contraseña guardada de esta bóveda de su cadena de claves del sistema.
forgetPassword.confirmBtn=Olvidar contraseña
# Unlock
unlock.title=Desbloquear bóveda
unlock.passwordPrompt=Ingresar contraseña para "%s":
unlock.savePassword=Guardar contraseña
unlock.unlockBtn=Desbloquear
## Success
unlock.success.message=¡"%s" se desbloqueó con éxito! La bóveda ya es accesible.
unlock.success.revealBtn=Revelar bóveda
# Migration
migration.title=Mejorar bóveda
## Start
migration.start.prompt=La bóveda "%s" necesita ser actualizada a un formato más nuevo. Antes de continuar, asegurarse de que no haya ninguna sincronización pendiente afectando esta bóveda.
migration.start.confirm=Sí, mi bóveda está sincronizada
## Run
migration.run.enterPassword=Ingresar la contraseña para "%s"
migration.run.startMigrationBtn=Migrar bóveda
## Sucess
migration.success.nextStepsInstructions="%s" se migró con éxito.\nYa se puede desbloquear la bóveda.
migration.success.unlockNow=Desbloquear ahora
# Preferences
preferences.title=Preferencias
## General
preferences.general=General
preferences.general.theme=Apariencia
preferences.general.startHidden=Ocultar ventana al iniciar Cryptomator
preferences.general.debugLogging=Habilitar registro de depuración
## Volume
preferences.volume=Unidad virtual
preferences.volume.type=Tipo de volumen
preferences.volume.webdav.port=Puerto WebDAV
preferences.volume.webdav.scheme=Esquema WebDAV
## Updates
preferences.updates=Actualizaciones
preferences.updates.currentVersion=Versión actual: %s
preferences.updates.autoUpdateCheck=Buscar actualizaciones automáticamente
preferences.updates.checkNowBtn=Buscar ahora
preferences.updates.updateAvailable=Actualización a la versión %s disponible.
# Main Window
main.closeBtn.tooltip=Cerrar
main.preferencesBtn.tooltip=Preferencias
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Hacer clic aquí para añadir una bóveda
main.vaultlist.contextMenu.remove=Eliminar bóveda
main.vaultlist.addVaultBtn=Añadir bóveda
## Vault Detail
### Locked
main.vaultDetail.lockedStatus=BLOQUEADO
main.vaultDetail.unlockBtn=Desbloquear
main.vaultDetail.optionsBtn=Opciones de la bóveda
### Unlocked
main.vaultDetail.unlockedStatus=DESBLOQUEADO
main.vaultDetail.accessLocation=El contenido de la bóveda es accesible aquí:
main.vaultDetail.revealBtn=Revelar unidad
main.vaultDetail.lockBtn=Bloquear
main.vaultDetail.bytesPerSecondRead=leído:
main.vaultDetail.bytesPerSecondWritten=escrito:
main.vaultDetail.throughput.idle=inactivo
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Needs Migration
main.vaultDetail.migrateButton=Mejorar bóveda
main.vaultDetail.migratePrompt=Su bóveda necesita ser actualizada a un formato nuevo antes de poder acceder a ella
# Wrong File Alert
wrongFileAlert.title=Archivo desconocido
wrongFileAlert.btn=Ok
wrongFileAlert.information=Se ha intentado añadir un archivo o carpeta que no parece ser una bóveda de Cryptomator. Para cifrar los datos, crear y desbloquear una bóveda.
# Vault Options
## General
vaultOptions.general=General
vaultOptions.general.changePasswordBtn=Cambiar contraseña
vaultOptions.general.showRecoveryKeyBtn=Mostrar la clave de recuperación
## Mount
vaultOptions.mount=Montaje
vaultOptions.mount.readonly=Sólo lectura
vaultOptions.mount.driveName=Nombre de la unidad
vaultOptions.mount.customMountFlags=Opciones de montaje personalizadas
vaultOptions.mount.winDriveLetterOccupied=ocupado
vaultOptions.mount.winDirChooser=Elija un directorio vacío
# Recovery Key
recoveryKey.title=Clave de recuperación
recoveryKey.enterPassword.prompt=Ingresar la contraseña para mostrar la clave de recuperación para "%s":
recoveryKey.display.message=Clave de recuperación para "%s":
# Misc
passwordStrength.messageLabel.0=Muy débil
passwordStrength.messageLabel.1=Débil
passwordStrength.messageLabel.2=Aceptable
passwordStrength.messageLabel.3=Fuerte
passwordStrength.messageLabel.4=Muy fuerte
# Quit
quit.prompt=¿Salir de la aplicación? Hay bóvedas desbloqueadas.
quit.lockAndQuit=Bloquear y salir
@@ -0,0 +1,184 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=Appliquer
generic.button.back=Précédent
generic.button.cancel=Annuler
generic.button.change=Modifier
generic.button.done=Terminé
generic.button.next=Suivant
# Tray Menu
traymenu.showMainWindow=Montrer
traymenu.showPreferencesWindow=Préférences
traymenu.quitApplication=Quitter
traymenu.vault.unlock=Déverrouiller
traymenu.vault.lock=Verrouiller
traymenu.vault.reveal=Révéler
# Add Vault Wizard
addvaultwizard.title=Ajouter un coffre
## Welcome
addvaultwizard.welcome.newButton=Créer un nouveau coffre
addvaultwizard.welcome.existingButton=Ouvrir un coffre existant
## New
### Name
addvaultwizard.new.nameInstruction=Choisir un nom pour le coffre
addvaultwizard.new.namePrompt=Nom du coffre
### Location
addvaultwizard.new.locationInstruction=Où Cryptomator doit-il stocker les fichiers chiffrés de votre coffre ?
addvaultwizard.new.locationLabel=Emplacement de stockage
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Emplacement personnalisé
addvaultwizard.new.directoryPickerButton=Choisir...
addvaultwizard.new.directoryPickerTitle=Choisissez le répertoire
addvaultwizard.new.enterPassword=Saisissez un mot de passe pour le coffre
addvaultwizard.new.fileAlreadyExists=Le coffre ne peut pas être créé sur ce chemin car un objet existe déjà.
addvaultwizard.new.invalidName=Nom de coffre invalide. Préférez un nom de répertoire habituel.
addvaultwizard.new.ioException=Le répertoire sélectionné a échoué un test de base. Assurez-vous d'avoir les droits d'accès appropriés et que rien n'interfère avec Cryptomator.
### Password
addvaultwizard.new.reenterPassword=Confirmez le mot de passe
addvaultwizard.new.passwordsMatch=Mots de passe identiques !
addvaultwizard.new.passwordsDoNotMatch=Les mots de passe ne correspondent pas
addvaultwizard.new.createVaultBtn=Créer un coffre
### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=C'est votre clé de récupération. Gardez-la en sécurité, c'est votre seule chance de récupérer vos données si vous perdez votre mot de passe.
addvaultwizard.new.recoveryKeySavedCheckbox=Oui, j'ai fait une sauvegarde sécurisée de cette clé de récupération
### Information
addvault.new.readme.storageLocation.fileName=QUEL EST CE RÉPERTOIRE.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ FICHIERS DU COFFRE ⚠️
addvault.new.readme.storageLocation.2=Ceci est l'emplacement de stockage de votre coffre. {\\b NE PAS} modifier les fichiers dans ce répertoire.
addvault.new.readme.storageLocation.3=Si vous voulez chiffrer des fichiers en utilisant Cryptomator, déverrouillez le coffre et utilisez le lecteur fourni.
addvault.new.readme.storageLocation.4=Si vous avez besoin d'aide, essayez %s.
addvault.new.readme.accessLocation.fileName=BIENVENUE DANS VOTRE COFFRE.rft
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ VOLUME CHIFFRÉ 🔐️
addvault.new.readme.accessLocation.2=Ceci est l'emplacement d'accès à votre coffre. Tous les fichiers ajoutés à ce volume seront chiffrés par Cryptomator. Pour accéder à ce volume plus tard, il suffit de le déverrouiller de nouveau à partir de l'application Cryptomator.
addvault.new.readme.accessLocation.3=Vous pouvez supprimer ce fichier.
## Existing
addvaultwizard.existing.instruction=Selectionner le fichier "masterkey.cryptomator" de votre coffre existant.
addvaultwizard.existing.chooseBtn=Choisir...
addvaultwizard.existing.filePickerTitle=Sélectionner le fichier clef
addvaultwizard.existing.error=Impossible d'ajouter le coffre "%s" : le coffre nest pas valide. Veuillez consulter le journal pour plus d'informations.
## Success
addvaultwizard.success.nextStepsInstructions=Coffre “%s” ajouté.\nIl faudra déverrouiller ce coffre afin dy accéder ou dy ajouter du contenu. Cette action na pas à être effectuée immédiatement.
addvaultwizard.success.unlockNow=Déverouiller
# Remove Vault
removeVault.title=Supprimer le coffre
removeVault.information=Ceci ne fera que retirer ce coffre de Cryptomator. Vous pourrez lajouter à nouveau plus tard. Aucun fichier chiffré ne sera supprimé de votre disque dur.
removeVault.confirmBtn=Supprimer le coffre
# Change Password
changepassword.title=Modifier le mot de passe
changepassword.enterOldPassword=Entrez le mot de passe actuel pour "%s"
changepassword.enterNewPassword=Entrez un nouveau mot de passe pour votre coffre
changepassword.reenterNewPassword=Confirmez le nouveau mot de passe
changepassword.passwordsMatch=Mots de passe identiques !
changepassword.passwordsDoNotMatch=Les mots de passe ne correspondent pas
changepassword.finalConfirmation=Je comprends que je ne pourrai pas récupérer mes données si j'oublie mon mot de passe
# Forget Password
forgetPassword.title=Oublier le mot de passe
forgetPassword.information=Ceci supprimera le mot de passe enregistré pour ce coffre de votre chaîne de clés système.
forgetPassword.confirmBtn=Oublier le mot de passe
# Unlock
unlock.title=Déverrouiller le coffre
unlock.passwordPrompt=Entrez le mot de passe pour “%s” :
unlock.savePassword=Enregistrer le mot de passe
unlock.unlockBtn=Déverrouiller
## Success
unlock.success.message=“%s” déverrouillé ! Le contenu de votre coffre est maintenant accessible.
unlock.success.revealBtn=Révéler le coffre
# Migration
migration.title=Mettre à jour le coffre
## Start
migration.start.prompt=Le coffre “%s” doit être mis à jour. Assurez-vous quaucune synchronisation nest en cours sur ce coffre avant de continuer.
migration.start.confirm=Ce coffre est bien synchronisé
## Run
migration.run.enterPassword=Entrez le mot de passe pour %s
migration.run.startMigrationBtn=Migrer le coffre
## Sucess
migration.success.nextStepsInstructions=“%s” migré.\nVous pouvez à présent déverrouiller ce coffre.
migration.success.unlockNow=Déverouiller
# Preferences
preferences.title=Préférences
## General
preferences.general=Général
preferences.general.theme=Apparence
preferences.general.startHidden=Démarrer Cryptomator en mode caché
preferences.general.debugLogging=Activer les logs debug
## Volume
preferences.volume=Disque virtuel
preferences.volume.type=Type de volume
preferences.volume.webdav.port=port WebDav
preferences.volume.webdav.scheme=Schéma WebDAV
## Updates
preferences.updates=Mises à jour
preferences.updates.currentVersion=Version actuelle : “%s”
preferences.updates.autoUpdateCheck=Vérifier automatiquement lexistence de mise à jour
preferences.updates.checkNowBtn=Vérifier maintenant
preferences.updates.updateAvailable=Mise à jour “%s” disponible.
# Main Window
main.closeBtn.tooltip=Fermer
main.preferencesBtn.tooltip=Préférences
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Cliquez ici pour ajouter un coffre
main.vaultlist.contextMenu.remove=Supprimer le coffre
main.vaultlist.addVaultBtn=Ajouter un coffre
## Vault Detail
### Locked
main.vaultDetail.lockedStatus=VERROUILLÉ
main.vaultDetail.unlockBtn=Déverrouiller
main.vaultDetail.optionsBtn=Option du coffre
### Unlocked
main.vaultDetail.unlockedStatus=DÉVERROUILLÉ
main.vaultDetail.accessLocation=Le contenu de votre coffre est accessible ici :
main.vaultDetail.revealBtn=Révéler le lecteur
main.vaultDetail.lockBtn=Verrouiller
main.vaultDetail.bytesPerSecondRead=lecture :
main.vaultDetail.bytesPerSecondWritten=écriture :
main.vaultDetail.throughput.idle=inactif
main.vaultDetail.throughput.kbps=%.1fkB/s
main.vaultDetail.throughput.mbps=%.1fMB/s
### Needs Migration
main.vaultDetail.migrateButton=Mettre à jour le coffre
main.vaultDetail.migratePrompt=Votre coffre doit être converti dans un nouveau format avant d'y accéder
# Wrong File Alert
wrongFileAlert.title=Fichier inconnu
wrongFileAlert.btn=Ok
wrongFileAlert.information=Vous avez essayé dajouter un fichier ou un dossier qui ne semble pas être un coffre Cryptomator. Pour chiffrer vos données, créez un coffre et déverrouillez-le.
# Vault Options
## General
vaultOptions.general=Général
vaultOptions.general.changePasswordBtn=Modifier le mot de passe
vaultOptions.general.showRecoveryKeyBtn=Afficher la clé de récupération
## Mount
vaultOptions.mount=Montage
vaultOptions.mount.readonly=Lecture seule
vaultOptions.mount.driveName=Nom du lecteur
vaultOptions.mount.customMountFlags=Drapeau de montage personnalisé
vaultOptions.mount.winDriveLetterOccupied=occupé
vaultOptions.mount.winDirChooser=Choisir un répertoire vide
# Recovery Key
recoveryKey.title=Clé de récupération
recoveryKey.enterPassword.prompt=Entrez votre mot de passe pour afficher la clé de récupération pour "%s":
recoveryKey.display.message=Clé de récupération pour "%s":
# Misc
passwordStrength.messageLabel.0=Très faible
passwordStrength.messageLabel.1=Faible
passwordStrength.messageLabel.2=Satisfaisant
passwordStrength.messageLabel.3=Fort
passwordStrength.messageLabel.4=Très fort
# Quit
quit.prompt=Quitter l'application ? Il y a des coffres déverrouillées.
quit.lockAndQuit=Verrouiller et quitter
@@ -0,0 +1,55 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
# Tray Menu
# Add Vault Wizard
## Welcome
## New
### Name
### Location
### Password
### Recovery Key
### Information
## Existing
## Success
# Remove Vault
# Change Password
# Forget Password
# Unlock
## Success
# Migration
## Start
## Run
## Sucess
# Preferences
## General
## Volume
## Updates
# Main Window
## Vault List
## Vault Detail
### Locked
### Unlocked
### Needs Migration
# Wrong File Alert
# Vault Options
## General
## Mount
# Recovery Key
# Misc
# Quit
@@ -0,0 +1,184 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=Applica
generic.button.back=Indietro
generic.button.cancel=Annulla
generic.button.change=Modifica
generic.button.done=Fatto
generic.button.next=Avanti
# Tray Menu
traymenu.showMainWindow=Visualizza
traymenu.showPreferencesWindow=Impostazioni
traymenu.quitApplication=Esci
traymenu.vault.unlock=Sblocca
traymenu.vault.lock=Blocca
traymenu.vault.reveal=Mostra
# Add Vault Wizard
addvaultwizard.title=Aggiungi Cassaforte
## Welcome
addvaultwizard.welcome.newButton=Crea Nuova Cassaforte
addvaultwizard.welcome.existingButton=Apri Cassaforte Esistente
## New
### Name
addvaultwizard.new.nameInstruction=Scegli un nome per la tua cassaforte
addvaultwizard.new.namePrompt=Nome Cassaforte
### Location
addvaultwizard.new.locationInstruction=Dove dovrebbe memorizzare Cryptomator i file crittografati della tua cassaforte?
addvaultwizard.new.locationLabel=Posizione archivio
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Posizione personalizzata
addvaultwizard.new.directoryPickerButton=Scegli…
addvaultwizard.new.directoryPickerTitle=Seleziona cartella
addvaultwizard.new.enterPassword=Inserisci una password per la cassaforte
addvaultwizard.new.fileAlreadyExists=La cassaforte non può essere creata in questo percorso perché un oggetto esiste già.
addvaultwizard.new.invalidName=Nome della cassaforte non valido. Si prega di considerare un nome di directory regolare.
addvaultwizard.new.ioException=La cartella selezionata non ha superato un test di base. Assicurati di avere i diritti di accesso adeguati e che nulla interferisca con Cryptomator.
### Password
addvaultwizard.new.reenterPassword=Conferma Password
addvaultwizard.new.passwordsMatch=Le password corrispondono!
addvaultwizard.new.passwordsDoNotMatch=Le password non corrispondono
addvaultwizard.new.createVaultBtn=Crea Cassaforte
### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=Questa è la tua chiave di recupero. Tienilo al sicuro, è la tua unica possibilità di recuperare i tuoi dati se perdi la password.
addvaultwizard.new.recoveryKeySavedCheckbox=Sì, ho fatto un backup sicuro di questa chiave di recupero
### Information
addvault.new.readme.storageLocation.fileName=CHE COSA È QUESTA DIRECTORY.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ FILE CASSAFORTE ⚠️
addvault.new.readme.storageLocation.2=Questa è la posizione di archiviazione della tua cassaforte. {\\b NON} modifica qualsiasi file all'interno di questa cartella.
addvault.new.readme.storageLocation.3=Se vuoi crittografare i file usando Cryptomator, sblocca la cassaforte e usa l'unità fornita.
addvault.new.readme.storageLocation.4=Se hai bisogno di aiuto, prova %s.
addvault.new.readme.accessLocation.fileName=BENVENUTO NELLA TUA CASSAFORTE.rtf
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ VOLUME CRIPTATO 🔐️
addvault.new.readme.accessLocation.2=Questa è la posizione di accesso del tuo caveau. Tutti i file aggiunti a questo volume verranno crittografati da Cryptomator. Per accedere a questo volume in un secondo momento, è sufficiente sbloccarlo nuovamente dall'applicazione Cryptomator.
addvault.new.readme.accessLocation.3=Sei libero di rimuovere questo file.
## Existing
addvaultwizard.existing.instruction=Scegliere il file "masterkey.cryptomator" del deposito esistente.
addvaultwizard.existing.chooseBtn=Scegli…
addvaultwizard.existing.filePickerTitle=Seleziona file Masterkey
addvaultwizard.existing.error=Impossibile aggiungere cassaforte "%s": Non è una cassaforte valida. Per favore, controlla il log per maggiori informazioni.
## Success
addvaultwizard.success.nextStepsInstructions=Aggiunta cassaforte"%s".\nÈ necessario sbloccare questa cassaforte per accedere o aggiungere contenuti. In alternativa puoi sbloccarla in qualsiasi momento successivo.
addvaultwizard.success.unlockNow=Sblocca adesso
# Remove Vault
removeVault.title=Rimuovi Cassaforte
removeVault.information=Questo farà dimenticare Cryptomator a questo vault. Puoi aggiungerlo di nuovo in seguito. Nessun file crittografato verrà eliminato dal tuo disco rigido.
removeVault.confirmBtn=Rimuovi Cassaforte
# Change Password
changepassword.title=Modifica password
changepassword.enterOldPassword=Inserisci la password attuale per "%s"
changepassword.enterNewPassword=Inserisci una nuova password per la tua cassaforte
changepassword.reenterNewPassword=Conferma la nuova password
changepassword.passwordsMatch=Le password corrispondono!
changepassword.passwordsDoNotMatch=Le password non corrispondono
changepassword.finalConfirmation=Ho capito che non potrò recuperare i miei dati se dimentico la mia password
# Forget Password
forgetPassword.title=Password dimenticata
forgetPassword.information=Questo cancellerà la password salvata di questa cassaforte dal tuo portachiavi di sistema.
forgetPassword.confirmBtn=Password dimenticata
# Unlock
unlock.title=Sblocca Cassaforte
unlock.passwordPrompt=Inserisci la password per "%s":
unlock.savePassword=Salva password
unlock.unlockBtn=Sblocca
## Success
unlock.success.message=Sbloccato "%s" con successo! La tua cassaforte è ora accessibile.
unlock.success.revealBtn=Rivela Cassaforte
# Migration
migration.title=Aggiorna Cassaforte
## Start
migration.start.prompt=La tua cassaforte "%s" deve essere aggiornata a un formato più recente. Prima di procedere, assicurati che non ci sia nessuna sincronizzazione in sospeso che influisca su questa cassaforte.
migration.start.confirm=Sì, la mia cassaforte è completamente sincronizzata
## Run
migration.run.enterPassword=Immettere la password per "%s"
migration.run.startMigrationBtn=Migra Cassaforte
## Sucess
migration.success.nextStepsInstructions=Migrato "%s" con successo.\nOra puoi sbloccare la tua cassaforte.
migration.success.unlockNow=Sblocca adesso
# Preferences
preferences.title=Impostazioni
## General
preferences.general=Generali
preferences.general.theme=Aspetto
preferences.general.startHidden=Nascondi la finestra all'avvio di Cryptomator
preferences.general.debugLogging=Abilita i registri di debug
## Volume
preferences.volume=Drive virtuale
preferences.volume.type=Tipo volume
preferences.volume.webdav.port=Porta WebDAV
preferences.volume.webdav.scheme=Schema WebDAV
## Updates
preferences.updates=Aggiornamenti
preferences.updates.currentVersion=Versione attuale %s
preferences.updates.autoUpdateCheck=Controlla automaticamente la presenza di aggiornamenti
preferences.updates.checkNowBtn=Controlla adesso
preferences.updates.updateAvailable=Disponibile aggiornamento alla versione %s.
# Main Window
main.closeBtn.tooltip=Chiudi
main.preferencesBtn.tooltip=Impostazioni
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Clicca qui per aggiungere una cassaforte
main.vaultlist.contextMenu.remove=Rimuovi Cassaforte
main.vaultlist.addVaultBtn=Aggiungi Cassaforte
## Vault Detail
### Locked
main.vaultDetail.lockedStatus=BLOCCATO
main.vaultDetail.unlockBtn=Sblocca
main.vaultDetail.optionsBtn=Opzioni Cassaforte
### Unlocked
main.vaultDetail.unlockedStatus=SBLOCCATO
main.vaultDetail.accessLocation=I contenuti della tua cassaforte sono accessibili qui:
main.vaultDetail.revealBtn=Visualizza disco
main.vaultDetail.lockBtn=Blocca
main.vaultDetail.bytesPerSecondRead=lettura:
main.vaultDetail.bytesPerSecondWritten=scrittura:
main.vaultDetail.throughput.idle=inattivo
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Needs Migration
main.vaultDetail.migrateButton=Aggiorna la cassaforte
main.vaultDetail.migratePrompt=Prima di potervi accedere la tua cassaforte deve essere aggiornata al nuovo formato
# Wrong File Alert
wrongFileAlert.title=File sconosciuto
wrongFileAlert.btn=OK
wrongFileAlert.information=Hai provato ad aggiungere un file o una cartella che non sembra essere una cassaforte di Cryptomator. Per crittografare i tuoi dati, creare e sbloccare una cassaforte.
# Vault Options
## General
vaultOptions.general=Generali
vaultOptions.general.changePasswordBtn=Modifica password
vaultOptions.general.showRecoveryKeyBtn=Visualizza la chiave di recupero
## Mount
vaultOptions.mount=Montaggio
vaultOptions.mount.readonly=Sola lettura
vaultOptions.mount.driveName=Nome drive
vaultOptions.mount.customMountFlags=Opzioni personalizzate
vaultOptions.mount.winDriveLetterOccupied=occupato
vaultOptions.mount.winDirChooser=Scegli una directory vuota
# Recovery Key
recoveryKey.title=Chiave di recupero
recoveryKey.enterPassword.prompt=Inserisci la password per visualizzare la chiave di recupero per "%s":
recoveryKey.display.message=Chiave di recupero per "%s":
# Misc
passwordStrength.messageLabel.0=Molto debole
passwordStrength.messageLabel.1=Debole
passwordStrength.messageLabel.2=Sufficiente
passwordStrength.messageLabel.3=Forte
passwordStrength.messageLabel.4=Molto forte
# Quit
quit.prompt=Chiudere l'applicazione? Ci sono depositi sbloccati.
quit.lockAndQuit=Blocca ed Esci
@@ -0,0 +1,184 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=適用
generic.button.back=戻る
generic.button.cancel=キャンセル
generic.button.change=変更
generic.button.done=完了
generic.button.next=次へ
# Tray Menu
traymenu.showMainWindow=表示
traymenu.showPreferencesWindow=設定
traymenu.quitApplication=終了
traymenu.vault.unlock=解錠
traymenu.vault.lock=施錠
traymenu.vault.reveal=表示
# Add Vault Wizard
addvaultwizard.title=金庫を追加
## Welcome
addvaultwizard.welcome.newButton=新しい金庫を作成
addvaultwizard.welcome.existingButton=既存の金庫を開く
## New
### Name
addvaultwizard.new.nameInstruction=金庫の名前を入力してください
addvaultwizard.new.namePrompt=金庫の名前
### Location
addvaultwizard.new.locationInstruction=金庫の暗号化済みファイルをどの場所に保存しますか?
addvaultwizard.new.locationLabel=保存場所
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=ユーザー設定
addvaultwizard.new.directoryPickerButton=選択...
addvaultwizard.new.directoryPickerTitle=ディレクトリを選択
addvaultwizard.new.enterPassword=金庫のパスワードを入力してください
addvaultwizard.new.fileAlreadyExists=いくつかのオブジェクトが既に存在しているため、このパスに金庫を作成することはできません。
addvaultwizard.new.invalidName=無効な金庫の名前です。一般的なディレクトリの名前を検討してください。
addvaultwizard.new.ioException=選択したディレクトリは、基本的なテストに失敗しました。適切なアクセス権限があることを確認し、Cryptomator に干渉しないようにしてください。
### Password
addvaultwizard.new.reenterPassword=パスワードの確認
addvaultwizard.new.passwordsMatch=パスワードが一致しました!
addvaultwizard.new.passwordsDoNotMatch=パスワードが一致しません
addvaultwizard.new.createVaultBtn=金庫を作成
### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=これは、あなたの回復キーです。大切に保管してください、パスワードを忘れてしまった場合でもデータを復元できる唯一の方法です。
addvaultwizard.new.recoveryKeySavedCheckbox=はい、回復キーを大切に保管しました
### Information
addvault.new.readme.storageLocation.fileName=このディレクトリについて.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ 金庫ファイル ⚠️
addvault.new.readme.storageLocation.2=ここは、金庫のストレージ先です。このディレクトリーのいずれに対しても変更を、{\\b 加えないでください} 。
addvault.new.readme.storageLocation.3=Cryptomator を利用してファイルを暗号化するには、金庫を施錠して表示されるドライブを使用してください。
addvault.new.readme.storageLocation.4=ヘルプが必要であれば、%s をお試しください。
addvault.new.readme.accessLocation.fileName=金庫へようこそ.rtf
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ 暗号ボリューム 🔐️
addvault.new.readme.accessLocation.2=ここは、金庫のアクセス先です。Cryptomator により、このボリュームに追加したファイルが暗号化されます。これからは、Cryptomator アプリケーションから解錠してこのボリュームにアクセスしてください。
addvault.new.readme.accessLocation.3=このファイルはいつでも削除できます。
## Existing
addvaultwizard.existing.instruction=既存の金庫の "masterkey.cryptomator" ファイルを選択してください。
addvaultwizard.existing.chooseBtn=選択...
addvaultwizard.existing.filePickerTitle=Masterkey ファイルを選択
addvaultwizard.existing.error=金庫 "%s" を追加できませんでした。不正な金庫です。詳細情報についてはログをご覧ください。
## Success
addvaultwizard.success.nextStepsInstructions=金庫 "%s" を追加しました。\n金庫にアクセスしたり、コンテンツを追加したりするには、金庫を解錠する必要があります。あるいは、後で解錠することが可能です。
addvaultwizard.success.unlockNow=今すぐ解錠
# Remove Vault
removeVault.title=金庫を削除
removeVault.information=この操作で、Cryptomator がこの金庫を認識しなくなります。あとで、再度追加することが可能です。暗号化されたファイルが、ドライブから削除されることはありません。
removeVault.confirmBtn=金庫を削除
# Change Password
changepassword.title=パスワードの変更
changepassword.enterOldPassword="%s" の現在のパスワードを入力してください
changepassword.enterNewPassword=金庫の新しいパスワードを入力してください
changepassword.reenterNewPassword=新しいパスワードの確認
changepassword.passwordsMatch=パスワードが一致しました!
changepassword.passwordsDoNotMatch=パスワードが一致しません
changepassword.finalConfirmation=パスワードを忘れた場合に、データを復元できないことを理解しました
# Forget Password
forgetPassword.title=パスワードを削除
forgetPassword.information=システムから金庫の保存済みパスワードを削除します。
forgetPassword.confirmBtn=パスワードを削除
# Unlock
unlock.title=金庫を解錠
unlock.passwordPrompt="%s" のパスワードを入力してください:
unlock.savePassword=パスワードを保存
unlock.unlockBtn=解錠
## Success
unlock.success.message="%s" の解錠に成功しました! 金庫にアクセス可能です。
unlock.success.revealBtn=金庫を表示
# Migration
migration.title=金庫をアップグレード
## Start
migration.start.prompt="%s" を新しいフォーマットに更新する必要があります。続行する前に、この金庫に影響する保留中の同期がないことをご確認ください。
migration.start.confirm=はい。同期が完了しています
## Run
migration.run.enterPassword="%s" のパスワードを入力してください
migration.run.startMigrationBtn=金庫を移行
## Sucess
migration.success.nextStepsInstructions="%s" の移行が成功しました。\n金庫を解錠できるようになりました。
migration.success.unlockNow=今すぐ解錠
# Preferences
preferences.title=設定
## General
preferences.general=基本設定
preferences.general.theme=外見 & 操作性
preferences.general.startHidden=Cryptomator を開始したとき、ウィンドウを隠す
preferences.general.debugLogging=ログを有効にする
## Volume
preferences.volume=仮想ドライブ
preferences.volume.type=マウント方法
preferences.volume.webdav.port=WebDAV ポート
preferences.volume.webdav.scheme=WebDAV スキーム
## Updates
preferences.updates=更新
preferences.updates.currentVersion=現在のバージョン: %s
preferences.updates.autoUpdateCheck=自動的に更新を確認する
preferences.updates.checkNowBtn=今すぐ確認
preferences.updates.updateAvailable=利用可能なバージョン %s に更新します。
# Main Window
main.closeBtn.tooltip=閉じる
main.preferencesBtn.tooltip=設定
## Vault List
main.vaultlist.emptyList.onboardingInstruction=ここをクリックして金庫を追加
main.vaultlist.contextMenu.remove=金庫を削除
main.vaultlist.addVaultBtn=金庫を追加
## Vault Detail
### Locked
main.vaultDetail.lockedStatus=施錠済み
main.vaultDetail.unlockBtn=解錠
main.vaultDetail.optionsBtn=金庫のオプション
### Unlocked
main.vaultDetail.unlockedStatus=解錠済み
main.vaultDetail.accessLocation=アクセス可能な金庫のコンテンツ:
main.vaultDetail.revealBtn=ドライブを表示
main.vaultDetail.lockBtn=施錠
main.vaultDetail.bytesPerSecondRead=読み取り:
main.vaultDetail.bytesPerSecondWritten=書き込み:
main.vaultDetail.throughput.idle=アイドル
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Needs Migration
main.vaultDetail.migrateButton=金庫をアップグレード
main.vaultDetail.migratePrompt=金庫にアクセスする前に、 金庫を新しい形式にアップグレードする必要があります
# Wrong File Alert
wrongFileAlert.title=不明なファイル
wrongFileAlert.btn=Ok
wrongFileAlert.information=Cryptomator の金庫ではない、ファイルかフォルダーを追加しようとしました。データを暗号化するには、金庫を作成して施錠してください。
# Vault Options
## General
vaultOptions.general=基本設定
vaultOptions.general.changePasswordBtn=パスワードの変更
vaultOptions.general.showRecoveryKeyBtn=回復キーを表示
## Mount
vaultOptions.mount=マウント
vaultOptions.mount.readonly=読み取り専用
vaultOptions.mount.driveName=ドライブ名
vaultOptions.mount.customMountFlags=カスタム マウント フラグ
vaultOptions.mount.winDriveLetterOccupied=使用中
vaultOptions.mount.winDirChooser=空のディレクトリを選択してください
# Recovery Key
recoveryKey.title=回復キー
recoveryKey.enterPassword.prompt="%s" の回復キーを表示するために、パスワードを入力してください:
recoveryKey.display.message="%s" の回復キー:
# Misc
passwordStrength.messageLabel.0=非常に弱い
passwordStrength.messageLabel.1=弱い
passwordStrength.messageLabel.2=普通
passwordStrength.messageLabel.3=強い
passwordStrength.messageLabel.4=非常に強い
# Quit
quit.prompt=アプリケーションを終了しますか? 施錠していない金庫が残っています。
quit.lockAndQuit=施錠して終了
@@ -0,0 +1,184 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=적용
generic.button.back=뒤로
generic.button.cancel=취소
generic.button.change=변경
generic.button.done=완료
generic.button.next=다음
# Tray Menu
traymenu.showMainWindow=보기
traymenu.showPreferencesWindow=환경설정
traymenu.quitApplication=종료
traymenu.vault.unlock=잠금해제
traymenu.vault.lock=잠금
traymenu.vault.reveal=표시
# Add Vault Wizard
addvaultwizard.title=Vault 추가
## Welcome
addvaultwizard.welcome.newButton=새 Vault 생성
addvaultwizard.welcome.existingButton=기존 Vault 열기
## New
### Name
addvaultwizard.new.nameInstruction=새 Vault의 이름을 입력하십시요.
addvaultwizard.new.namePrompt=Vault 이름
### Location
addvaultwizard.new.locationInstruction=Cryptomator Vault 내 암호화 파일을 어느 경로에 저장하시겠습니까?
addvaultwizard.new.locationLabel=저장소 위치
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=사용자 지정 위치
addvaultwizard.new.directoryPickerButton=선택
addvaultwizard.new.directoryPickerTitle=디렉터리 선택
addvaultwizard.new.enterPassword=Vault의 비밀번호를 입력하십시요.
addvaultwizard.new.fileAlreadyExists=이미 다른 객체가 존재하고 있어 해당 경로에 Vault를 생성할 수 없습니다.
addvaultwizard.new.invalidName=유효하지 않은 Vault 이름입니다. 일반적인 디렉터리 이름으로 지정해주십시요.
addvaultwizard.new.ioException=선택된 디렉터리가 기본테스트에 실패하였습니다. Cryptomator가 적절한 권한을 가지고 있고 간섭을 받는 것은 없는지 확인하여 주십시요.
### Password
addvaultwizard.new.reenterPassword=비밀번호 확인
addvaultwizard.new.passwordsMatch=비밀번호 일치!
addvaultwizard.new.passwordsDoNotMatch=비밀번호가 일치하지 않습니다.
addvaultwizard.new.createVaultBtn=Vault 생성
### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=이것은 복구키입니다. 만일 비밀번호를 분실하셨을 때,데이터를 복구 할 수 있는 유일한 방법이므로, 안전하게 보관하시기 바랍니다.
addvaultwizard.new.recoveryKeySavedCheckbox=예, 이 복구키를 안전하게 백업해두었습니다.
### Information
addvault.new.readme.storageLocation.fileName=이 디렉터리에 대해.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ VAULT 파일 ⚠️
addvault.new.readme.storageLocation.2=이곳은 Vault 파일 저장경로입니다. {\\b 절대로} 이 디렉터리의 파일을 임의로 교체하거나 수정하지 마십시요.
addvault.new.readme.storageLocation.3=Cryptomator를 사용하여 파일을 암호화하고 싶으시면, Vault를 잠금해제하고 준비된 드라이브에 사용하십시요.
addvault.new.readme.storageLocation.4=도움이 필요하시면, %s를 시도하여 보십시요.
addvault.new.readme.accessLocation.fileName=Vault에 오신것을 환영합니다.rtf
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ 암호화된 볼륨 🔐️
addvault.new.readme.accessLocation.2=이곳은 Vault의 접근장소입니다. 이 볼륨에 추가된 파일은 Cryptomator로 암호화 될 것입니다. 나중에 이 볼륨에 접근하기 위해서는, 단순히 Cryptomator 애플리케이션 내에서 잠금해제하여 주십시요.
addvault.new.readme.accessLocation.3=이 파일은 지우셔도 무방합니다.
## Existing
addvaultwizard.existing.instruction=기존 Vault 의 "masterkey.cryptomator" 파일을 선택하여 주십시요.
addvaultwizard.existing.chooseBtn=선택
addvaultwizard.existing.filePickerTitle=마스터키 파일 선택
addvaultwizard.existing.error="%s" Vault를 추가할 수 없습니다: Vault가 유효하지 않습니다. 자세한 내용은 로그를 참조하여 주십시요.
## Success
addvaultwizard.success.nextStepsInstructions="%s" Vault가 추가되었습니다.\n이 Vault를 접근하거나 컨텐츠를 추가하려면 잠금해제가 필요합니다. 그렇지만 언제든지 잠금해제가 가능합니다.
addvaultwizard.success.unlockNow=지금 잠금해제
# Remove Vault
removeVault.title=Vault 제거
removeVault.information=이 행위는 단지 Cryptomator에서 이 Vault를 잊게합니다. 나중에 다시 추가 할 수 있습니다. 암호화된 파일은 하드디스크에서 삭제되지 않을 것입니다.
removeVault.confirmBtn=Vault 제거
# Change Password
changepassword.title=비밀번호 변경
changepassword.enterOldPassword="%s"의 비밀번호를 입력하여 주십시요.
changepassword.enterNewPassword=Vault의 새 비밀번호를 입력하십시요.
changepassword.reenterNewPassword=새 비밀번호 확인
changepassword.passwordsMatch=비밀번호 일치!
changepassword.passwordsDoNotMatch=비밀번호가 일치하지 않습니다.
changepassword.finalConfirmation=지정한 비밀번호를 잊어버리면 데이터를 복구할 수 없음을 알고있습니다.
# Forget Password
forgetPassword.title=비밀번호 분실
forgetPassword.information=시스템 키체인에서 이 Vault의 저장된 비밀번호가 삭제될 것입니다.
forgetPassword.confirmBtn=비밀번호 분실
# Unlock
unlock.title=Vault 잠금해제
unlock.passwordPrompt="%s"의 비밀번호를 입력하십시요.
unlock.savePassword=비밀번호 저장
unlock.unlockBtn=잠금해제
## Success
unlock.success.message="%s"의 잠금해제가 성공적으로 수행되었습니다! 이제 이 Vault의 접근이 가능합니다.
unlock.success.revealBtn=Vault 표시
# Migration
migration.title=Vault 업그레이드
## Start
migration.start.prompt="%s" vault는 새로운 포멧으로 업데이트가 필요합니다. 작업 전, 이 Vault에 영향을 줄만한 동기화가 보류중인지 확인하여 주십시요.
migration.start.confirm=네, 이 Vault는 동기화가 완전히 된 상태입니다.
## Run
migration.run.enterPassword="%s"의 비밀번호를 입력하십시요.
migration.run.startMigrationBtn=Vault 마이그레이션
## Sucess
migration.success.nextStepsInstructions="%s" 의 마이그레이션이 성공적으로 완료되었습니다. 이제 Vault를 잠금해제할 수 있습니다.
migration.success.unlockNow=지금 잠금해제
# Preferences
preferences.title=환경설정
## General
preferences.general=일반
preferences.general.theme=테마설정
preferences.general.startHidden=Cryptomator를 시작할 때 창 숨김
preferences.general.debugLogging=디버그 로그기록을 사용하도록 설정
## Volume
preferences.volume=가상 드라이브
preferences.volume.type=볼륨 유형
preferences.volume.webdav.port=WebDAV 포트
preferences.volume.webdav.scheme=WebDAV 스킴
## Updates
preferences.updates=업데이트
preferences.updates.currentVersion=현재 버전: %s
preferences.updates.autoUpdateCheck=자동으로 업데이트 확인
preferences.updates.checkNowBtn=지금 확인
preferences.updates.updateAvailable=버전 %s의 업데이트가 가능합니다.
# Main Window
main.closeBtn.tooltip=닫기
main.preferencesBtn.tooltip=환경설정
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Vault를 추가하기 위해 이곳을 클릭합니다.
main.vaultlist.contextMenu.remove=Vault 제거
main.vaultlist.addVaultBtn=Vault 추가
## Vault Detail
### Locked
main.vaultDetail.lockedStatus=잠김
main.vaultDetail.unlockBtn=잠금해제
main.vaultDetail.optionsBtn=Vault 옵션
### Unlocked
main.vaultDetail.unlockedStatus=잠금해제됨
main.vaultDetail.accessLocation=이 Vault의 내용은 다음의 경로에서 접근할 수 있습니다:
main.vaultDetail.revealBtn=드라이브 표시
main.vaultDetail.lockBtn=잠금
main.vaultDetail.bytesPerSecondRead=읽기:
main.vaultDetail.bytesPerSecondWritten=쓰기:
main.vaultDetail.throughput.idle=대기
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Needs Migration
main.vaultDetail.migrateButton=Vault 업그레이드
main.vaultDetail.migratePrompt=Vault에 접근하기 전, 새로운 포멧으로 업그레이드가 필요합니다.
# Wrong File Alert
wrongFileAlert.title=알 수 없는 파일
wrongFileAlert.btn=확인
wrongFileAlert.information=Cryptomator vault에 없는 파일이나 폴더를 추가하려고 하신 것 같습니다. 데이터를 암호화하기 위해 Vault를 생성하시고 잠금해제하시기 바랍니다.
# Vault Options
## General
vaultOptions.general=일반
vaultOptions.general.changePasswordBtn=비밀번호 변경
vaultOptions.general.showRecoveryKeyBtn=복구 키 출력
## Mount
vaultOptions.mount=드라이브 구성
vaultOptions.mount.readonly=읽기 전용
vaultOptions.mount.driveName=드라이브 이름
vaultOptions.mount.customMountFlags=사용자 정의 매개변수 사용
vaultOptions.mount.winDriveLetterOccupied=사용됨
vaultOptions.mount.winDirChooser=빈 디렉터리를 선택해 주십시요
# Recovery Key
recoveryKey.title=복구 키
recoveryKey.enterPassword.prompt="%s"의 복구 키를 표시하려면 비밀번호를 입력하여 주십시요.
recoveryKey.display.message="%s"의 복구 키
# Misc
passwordStrength.messageLabel.0=매우 취약함
passwordStrength.messageLabel.1=취약함
passwordStrength.messageLabel.2=보통
passwordStrength.messageLabel.3=강함
passwordStrength.messageLabel.4=매우 강함
# Quit
quit.prompt=애플리케이션을 종료하시겠습니까? Vault가 잠금해제된 상태입니다.
quit.lockAndQuit=Vault 잠금 후 종료하기
@@ -0,0 +1,184 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=Toepassen
generic.button.back=Terug
generic.button.cancel=Annuleren
generic.button.change=Wijzig
generic.button.done=Klaar
generic.button.next=Volgende
# Tray Menu
traymenu.showMainWindow=Toon
traymenu.showPreferencesWindow=Voorkeuren
traymenu.quitApplication=Afsluiten
traymenu.vault.unlock=Ontgrendel
traymenu.vault.lock=Vergrendel
traymenu.vault.reveal=Laat zien
# Add Vault Wizard
addvaultwizard.title=Kluis toevoegen
## Welcome
addvaultwizard.welcome.newButton=Nieuwe Kluis Aanmaken
addvaultwizard.welcome.existingButton=Open Bestaande Kluis
## New
### Name
addvaultwizard.new.nameInstruction=Kies een naam voor de kluis
addvaultwizard.new.namePrompt=Kluisnaam
### Location
addvaultwizard.new.locationInstruction=Waar moet Cryptomator de versleutelde bestanden van je kluis opslaan?
addvaultwizard.new.locationLabel=Opslaglocatie
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Andere locatie
addvaultwizard.new.directoryPickerButton=Kies…
addvaultwizard.new.directoryPickerTitle=Selecteer map
addvaultwizard.new.enterPassword=Voer een wachtwoord voor de kluis in
addvaultwizard.new.fileAlreadyExists=Er kan op deze locatie geen kluis aangemaakt worden, omdat er een bepaald object bestaat.
addvaultwizard.new.invalidName=Ongeldige kluisnaam. Overweeg een standaard mapnaam.
addvaultwizard.new.ioException=De geselecteerde map heeft een basistest niet gehaald. Zorg dat de map de juiste rechten heeft, en dat er niet conflicteert met Cryptomator.
### Password
addvaultwizard.new.reenterPassword=Bevestig het wachtwoord
addvaultwizard.new.passwordsMatch=Wachtwoorden komen overeen!
addvaultwizard.new.passwordsDoNotMatch=Wachtwoorden komen niet overeen
addvaultwizard.new.createVaultBtn=Kluis aanmaken
### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=Dit is uw herstelsleutel. Bewaar deze goed, het is de enige mogelijkheid om uw data te herstellen als u uw wachtwoord verliest.
addvaultwizard.new.recoveryKeySavedCheckbox=Ja, ik heb een beveiligde back-up gemaakt van deze herstelsleutel
### Information
addvault.new.readme.storageLocation.fileName=WAT IS DEZE MAP.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ KLUIS BESTANDEN ⚠️
addvault.new.readme.storageLocation.2=Dit is de opslaglocatie van uw kluis. Wijzig {\\b GEEN} bestanden binnen deze map.
addvault.new.readme.storageLocation.3=Als u bestanden wilt versleutelen met Cryptomator, ontgrendel dan de kluis en gebruik de opgegeven schijf.
addvault.new.readme.storageLocation.4=Als je hulp nodig hebt, probeer %s.
addvault.new.readme.accessLocation.fileName=WELKOM IN UW KLUIS.rtf
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐 VERSLEUTELD VOLUME 🔐
addvault.new.readme.accessLocation.2=Dit is de toegangslocatie van uw kluis. Alle bestanden die aan dit volume worden toegevoegd zullen worden versleuteld door Cryptomator. Om dit volume op een later tijdstip te kunnen gebruiken, ontgrendelt u het gewoon opnieuw vanuit de Cryptomator applicatie.
addvault.new.readme.accessLocation.3=Voel je vrij om dit bestand te verwijderen.
## Existing
addvaultwizard.existing.instruction=Kies het "masterkey.cryptomator" bestand van uw bestaande kluis.
addvaultwizard.existing.chooseBtn=Kies…
addvaultwizard.existing.filePickerTitle=Selecteer het Masterkey-bestand
addvaultwizard.existing.error=Kluis "%s" kan niet toegevoegd worden: Geen geldige kluis. Kijk in het logbestand voor verdere informatie.
## Success
addvaultwizard.success.nextStepsInstructions=Toegevoegde kluis "%s".\nOntgrendel deze kluis om toegang te krijgen tot of om inhoud toe te voegen. Optioneel kunt u deze op elk later tijdstip ontgrendelen.
addvaultwizard.success.unlockNow=Nu Ontgrendelen
# Remove Vault
removeVault.title=Verwijder Kluis
removeVault.information=Dit laat Cryptomator enkel deze kluis vergeten. U kunt deze later opnieuw toevoegen. Er worden geen versleutelde bestanden van uw harde schijf verwijderd.
removeVault.confirmBtn=Verwijder Kluis
# Change Password
changepassword.title=Wijzig wachtwoord
changepassword.enterOldPassword=Voer het huidige wachtwoord voor "%s" in
changepassword.enterNewPassword=Voer een nieuw wachtwoord voor de kluis in
changepassword.reenterNewPassword=Bevestig het nieuwe wachtwoord
changepassword.passwordsMatch=Wachtwoorden komen overeen!
changepassword.passwordsDoNotMatch=Wachtwoorden komen niet overeen
changepassword.finalConfirmation=Ik begrijp dat ik mijn gegevens niet kan herstellen als ik mijn wachtwoord vergeet
# Forget Password
forgetPassword.title=Wachtwoord vergeten
forgetPassword.information=Dit zal het opgeslagen wachtwoord van deze kluis uit uw systeem wissen.
forgetPassword.confirmBtn=Wachtwoord vergeten
# Unlock
unlock.title=Kluis ontgrendelen
unlock.passwordPrompt=Voer wachtwoord voor "%s" in:
unlock.savePassword=Wachtwoord Opslaan
unlock.unlockBtn=Ontgrendel
## Success
unlock.success.message="%s" is met succes ontgrendeld! Uw kluis is nu toegankelijk.
unlock.success.revealBtn=Toon kluis
# Migration
migration.title=Kluis upgraden
## Start
migration.start.prompt=Uw kluis "%s" moet worden bijgewerkt naar een nieuw formaat. Zorg dat er geen lopende synchronisaties zijn voordat u doorgaat.
migration.start.confirm=Ja, mijn kluis is volledig gesynchroniseerd
## Run
migration.run.enterPassword=Voer wachtwoord voor "%s" in
migration.run.startMigrationBtn=Kluis migreren
## Sucess
migration.success.nextStepsInstructions="%s" is succesvol gemigreerd.\nU kunt nu uw kluis ontgrendelen.
migration.success.unlockNow=Nu Ontgrendelen
# Preferences
preferences.title=Voorkeuren
## General
preferences.general=Algemeen
preferences.general.theme=Uiterlijk
preferences.general.startHidden=Verberg venster bij het opstarten van Cryptomator
preferences.general.debugLogging=Debug logging aanzetten
## Volume
preferences.volume=Virtuele schijf
preferences.volume.type=Type volume
preferences.volume.webdav.port=WebDAV Poort
preferences.volume.webdav.scheme=WebDAV Schema
## Updates
preferences.updates=Updates
preferences.updates.currentVersion=Huidige Versie: "%s"
preferences.updates.autoUpdateCheck=Automatisch controleren op updates
preferences.updates.checkNowBtn=Controleer nu
preferences.updates.updateAvailable=Update naar versie "%s" beschikbaar.
# Main Window
main.closeBtn.tooltip=Sluiten
main.preferencesBtn.tooltip=Voorkeuren
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Klik hier om een kluis toe te voegen
main.vaultlist.contextMenu.remove=Verwijder Kluis
main.vaultlist.addVaultBtn=Kluis toevoegen
## Vault Detail
### Locked
main.vaultDetail.lockedStatus=VERGRENDELD
main.vaultDetail.unlockBtn=Ontgrendel
main.vaultDetail.optionsBtn=Kluis-instellingen
### Unlocked
main.vaultDetail.unlockedStatus=ONTGRENDELD
main.vaultDetail.accessLocation=De inhoud van uw kluis is hier toegankelijk:
main.vaultDetail.revealBtn=Toon Schijf
main.vaultDetail.lockBtn=Vergrendel
main.vaultDetail.bytesPerSecondRead=lezen:
main.vaultDetail.bytesPerSecondWritten=schrijven:
main.vaultDetail.throughput.idle=inactief
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Needs Migration
main.vaultDetail.migrateButton=Kluis upgraden
main.vaultDetail.migratePrompt=Uw kluis moet worden bijgewerkt naar een nieuw formaat, voordat u deze kunt openen
# Wrong File Alert
wrongFileAlert.title=Onbekend bestand
wrongFileAlert.btn=Oké
wrongFileAlert.information=U hebt geprobeerd om een bestand of een map toe te voegen die geen Cryptomator kluis is. Maak en ontgrendel een kluis om uw gegevens te versleutelen.
# Vault Options
## General
vaultOptions.general=Algemeen
vaultOptions.general.changePasswordBtn=Wijzig wachtwoord
vaultOptions.general.showRecoveryKeyBtn=Toon herstelsleutel
## Mount
vaultOptions.mount=Aankoppelen
vaultOptions.mount.readonly=Alleen-Lezen
vaultOptions.mount.driveName=Schijfnaam
vaultOptions.mount.customMountFlags=Aangepaste Aankoppel Parameters
vaultOptions.mount.winDriveLetterOccupied=in gebruik
vaultOptions.mount.winDirChooser=Kies een lege map
# Recovery Key
recoveryKey.title=Herstelsleutel
recoveryKey.enterPassword.prompt=Voer uw wachtwoord in om de herstelsleutel voor "%s" te tonen:
recoveryKey.display.message=Herstelsleutel voor "%s":
# Misc
passwordStrength.messageLabel.0=Zeer zwak
passwordStrength.messageLabel.1=Zwak
passwordStrength.messageLabel.2=Redelijk
passwordStrength.messageLabel.3=Sterk
passwordStrength.messageLabel.4=Zeer sterk
# Quit
quit.prompt=Applicatie afsluiten? Er zijn kluizen ontgrendeld.
quit.lockAndQuit=Vergrendelen en Afsluiten
@@ -0,0 +1,55 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
# Tray Menu
# Add Vault Wizard
## Welcome
## New
### Name
### Location
### Password
### Recovery Key
### Information
## Existing
## Success
# Remove Vault
# Change Password
# Forget Password
# Unlock
## Success
# Migration
## Start
## Run
## Sucess
# Preferences
## General
## Volume
## Updates
# Main Window
## Vault List
## Vault Detail
### Locked
### Unlocked
### Needs Migration
# Wrong File Alert
# Vault Options
## General
## Mount
# Recovery Key
# Misc
# Quit
@@ -0,0 +1,179 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=Aplicar
generic.button.back=Voltar
generic.button.cancel=Cancelar
generic.button.change=Alterar
generic.button.done=Pronto
generic.button.next=Próximo
# Tray Menu
traymenu.showMainWindow=Exibir
traymenu.showPreferencesWindow=Preferências
traymenu.quitApplication=Sair
traymenu.vault.unlock=Desbloquear
traymenu.vault.lock=Bloquear
traymenu.vault.reveal=Exibir
# Add Vault Wizard
addvaultwizard.title=Adicionar Cofre
## Welcome
addvaultwizard.welcome.newButton=Criar Um Novo Cofre
addvaultwizard.welcome.existingButton=Abrir Um Cofre Existente
## New
### Name
addvaultwizard.new.nameInstruction=Escolha um nome para o cofre
addvaultwizard.new.namePrompt=Nome do Cofre
### Location
addvaultwizard.new.locationInstruction=Onde o Cryptomator deve armazenar os arquivos criptografados do seu cofre?
addvaultwizard.new.locationLabel=Localização do armazenamento
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Local Personalizado
addvaultwizard.new.directoryPickerButton=Escolher…
addvaultwizard.new.directoryPickerTitle=Selecionar Diretório
addvaultwizard.new.enterPassword=Digite uma senha para o cofre
addvaultwizard.new.fileAlreadyExists=O cofre não pode ser criado neste local porque algum objeto já existe.
addvaultwizard.new.invalidName=Nome de cofre inválido. Por favor considere usar um nome de diretório comum.
### Password
addvaultwizard.new.reenterPassword=Confirme a senha
addvaultwizard.new.passwordsMatch=As senhas são idênticas!
addvaultwizard.new.passwordsDoNotMatch=As senhas são diferentes
addvaultwizard.new.createVaultBtn=Criar Cofre
### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=Esta é a sua chave de recuperação. Mantenha-a segura, é sua única chance de recuperar seus dados se você perder sua senha.
addvaultwizard.new.recoveryKeySavedCheckbox=Sim, fiz um backup seguro desta chave de recuperação
### Information
addvault.new.readme.storageLocation.fileName=O QUE É ESTE DIRETÓRIO.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ ARQUIVOS DO COFRE ⚠️
addvault.new.readme.storageLocation.2=Esta é a localização do seu cofre. {\\b NÃO} altere arquivos neste diretório.
addvault.new.readme.storageLocation.3=Se você quiser criptografar seus arquivos usando o Cryptomator, desbloqueie o cofre e use o local de armazenamento provido.
addvault.new.readme.storageLocation.4=Se precisar de ajuda, tente %s.
addvault.new.readme.accessLocation.fileName=BEM VINDO AO SEU COFRE.rtf
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ VOLUME CRIPTOGRAFADO 🔐️
addvault.new.readme.accessLocation.2=Este é o local de acesso do seu cofre. Qualquer arquivo que você adicionar a este volume será criptografado pelo Cryptomator. Para acessar este volume posteriormente, simplesmente desbloqueie novamente o cofre na aplicação do Cryptomator.
addvault.new.readme.accessLocation.3=Sinta-se livre para apagar este arquivo.
## Existing
addvaultwizard.existing.instruction=Selecione o arquivo "masterkey.cryptomator" do seu cofre existente.
addvaultwizard.existing.chooseBtn=Selecionar…
addvaultwizard.existing.filePickerTitle=Selecionar Arquivo Masterkey
addvaultwizard.existing.error=Não foi possível adicionar o cofre "%s": Não é um cofre válido. Por favor, procure no log para mais informações.
## Success
addvaultwizard.success.nextStepsInstructions=Cofre "%s" adicionado.\nVocê precisa desbloquear este cofre para acessar ou adicionar conteúdo. Você também pode desbloqueá-lo a qualquer momento.
addvaultwizard.success.unlockNow=Desbloquear Agora
# Remove Vault
removeVault.title=Remover Cofre
removeVault.information=Isso apenas fará que o Cryptomator esqueça este cofre. Você pode adicioná--lo novamente. Nenhum arquivo criptografado será apagado do seu disco rígido.
removeVault.confirmBtn=Remover Cofre
# Change Password
changepassword.title=Alterar Senha
changepassword.enterOldPassword=Digite a senha atual para "%s"
changepassword.enterNewPassword=Digite uma nova senha para o seu cofre
changepassword.reenterNewPassword=Confirme a nova senha
changepassword.passwordsMatch=As senhas são idênticas!
changepassword.passwordsDoNotMatch=As senhas são diferentes
changepassword.finalConfirmation=Eu entendo que não poderei recuperar meus dados se esquecer minha senha
# Forget Password
forgetPassword.title=Esquecer Senha
forgetPassword.information=Isso removerá a senha salva deste cofre do chaveiro do seu sistema.
forgetPassword.confirmBtn=Esquecer Senha
# Unlock
unlock.title=Desbloquear Cofre
unlock.passwordPrompt=Digite a senha para "%s":
unlock.savePassword=Salvar Senha
unlock.unlockBtn=Desbloquear
## Success
unlock.success.message="%s" foi desbloqueado com sucesso! Seu cofre agora está acessível.
unlock.success.revealBtn=Revelar Cofre
# Migration
migration.title=Atualizar Cofre
## Start
migration.start.prompt=Seu cofre "%s" precisa ser atualizado para um novo formato. Antes de prosseguir, certifique-se de que nenhuma sincronização pendente está afetando este cofre.
migration.start.confirm=Sim, meu cofre está completamente sincronizado
## Run
migration.run.enterPassword=Digite a senha para "%s"
migration.run.startMigrationBtn=Migrar Cofre
## Sucess
migration.success.nextStepsInstructions="%s" migrado com sucesso.\nVocê agora pode desbloquear este cofre.
migration.success.unlockNow=Desbloquear Agora
# Preferences
preferences.title=Preferências
## General
preferences.general=Geral
preferences.general.theme=Aparência
preferences.general.startHidden=Ocultar janela ao iniciar o Cryptomator
preferences.general.debugLogging=Ativar log de debug
## Volume
preferences.volume=Volume Virtual
preferences.volume.type=Tipo de Volume
preferences.volume.webdav.port=Porta WebDAV
preferences.volume.webdav.scheme=Esquema WebDAV
## Updates
preferences.updates=Atualizações
preferences.updates.currentVersion=Versão atual: %s
preferences.updates.autoUpdateCheck=Buscar atualizações automaticamente
preferences.updates.checkNowBtn=Buscar Agora
preferences.updates.updateAvailable=Atualizar para versão %s disponível.
# Main Window
main.closeBtn.tooltip=Fechar
main.preferencesBtn.tooltip=Preferências
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Clique aqui para adicionar um cofre
main.vaultlist.contextMenu.remove=Remover Cofre
main.vaultlist.addVaultBtn=Adicionar Cofre
## Vault Detail
### Locked
main.vaultDetail.lockedStatus=BLOQUEADO
main.vaultDetail.unlockBtn=Desbloquear
main.vaultDetail.optionsBtn=Opções de Cofre
### Unlocked
main.vaultDetail.unlockedStatus=DESBLOQUEADO
main.vaultDetail.accessLocation=O conteúdo do seu cofre está disponível aqui:
main.vaultDetail.revealBtn=Revelar Volume
main.vaultDetail.lockBtn=Bloquear
main.vaultDetail.bytesPerSecondRead=leitura:
main.vaultDetail.bytesPerSecondWritten=gravação:
main.vaultDetail.throughput.idle=ocioso
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Needs Migration
main.vaultDetail.migrateButton=Atualizar Cofre
# Wrong File Alert
wrongFileAlert.title=Arquivo Desconhecido
wrongFileAlert.btn=Ok
wrongFileAlert.information=Você tentou adicionar um arquivo ou diretório que não aparenta ser um cofre do Cryptomator. Para criptografar seus dados, crie e desbloqueie um cofre.
# Vault Options
## General
vaultOptions.general=Geral
vaultOptions.general.changePasswordBtn=Alterar Senha
vaultOptions.general.showRecoveryKeyBtn=Exibir chave de recuperação
## Mount
vaultOptions.mount=Montagem
vaultOptions.mount.readonly=Somente Leitura
vaultOptions.mount.driveName=Nome do Volume
vaultOptions.mount.customMountFlags=Flags Personalizadas de Montagem
# Recovery Key
recoveryKey.title=Chave de recuperação
recoveryKey.enterPassword.prompt=Digite sua senha para mostrar a chave de recuperação de "%s":
recoveryKey.display.message=Chave de recuperação de "%s":
# Misc
passwordStrength.messageLabel.0=Muito fraca
passwordStrength.messageLabel.1=Fraca
passwordStrength.messageLabel.2=Média
passwordStrength.messageLabel.3=Forte
passwordStrength.messageLabel.4=Muito forte
# Quit
quit.prompt=Sair da aplicação? Existem cofres desbloqueados.
@@ -0,0 +1,184 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=Применить
generic.button.back=Назад
generic.button.cancel=Отмена
generic.button.change=Изменить
generic.button.done=Готово
generic.button.next=Далее
# Tray Menu
traymenu.showMainWindow=Показать
traymenu.showPreferencesWindow=Настройки
traymenu.quitApplication=Выход
traymenu.vault.unlock=Разблокировать
traymenu.vault.lock=Заблокировать
traymenu.vault.reveal=Показать
# Add Vault Wizard
addvaultwizard.title=Добавить хранилище
## Welcome
addvaultwizard.welcome.newButton=Создать хранилище
addvaultwizard.welcome.existingButton=Открыть имеющееся хранилище
## New
### Name
addvaultwizard.new.nameInstruction=Выберите имя для хранилища
addvaultwizard.new.namePrompt=Имя хранилища
### Location
addvaultwizard.new.locationInstruction=Где Cryptomator должен хранить зашифрованные файлы вашего хранилища?
addvaultwizard.new.locationLabel=Место хранения
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Своё место
addvaultwizard.new.directoryPickerButton=Выбрать…
addvaultwizard.new.directoryPickerTitle=Выберите каталог
addvaultwizard.new.enterPassword=Введите пароль для хранилища
addvaultwizard.new.fileAlreadyExists=Хранилище не может быть создано по этому пути, потому что некоторые объекты уже существуют.
addvaultwizard.new.invalidName=Неверное имя хранилища. Укажите корректное имя каталога.
addvaultwizard.new.ioException=Выбранный каталог не прошел начальную проверку. Убедитесь, что у вас есть права доступа и ничего не мешает Cryptomator.
### Password
addvaultwizard.new.reenterPassword=Подтвердите пароль
addvaultwizard.new.passwordsMatch=Пароли совпадают
addvaultwizard.new.passwordsDoNotMatch=Пароли не совпадают
addvaultwizard.new.createVaultBtn=Создать хранилище
### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=Это ключ восстановления. Держите его в надёжном месте - это единственный шанс восстановить данные, если вы потеряете пароль.
addvaultwizard.new.recoveryKeySavedCheckbox=Да, у меня есть резервная копия этого ключа восстановления
### Information
addvault.new.readme.storageLocation.fileName=ЧТО ЗА КАТАЛОГ.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ ФАЙЛЫ ХРАНИЛИЩ ⚠️
addvault.new.readme.storageLocation.2=Это место, где находится ваше хранилище. {\\b НЕ} изменяйте никакие файлы в этом каталоге.
addvault.new.readme.storageLocation.3=Если вы хотите зашифровать файлы с помощью Cryptomator, разблокируйте хранилище и используйте предоставленный диск.
addvault.new.readme.storageLocation.4=Нужна помощь? Попробуйте %s.
addvault.new.readme.accessLocation.fileName=ДОБРО ПОЖАЛОВАТЬ В ХРАНИЛИЩЕ.rtf
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ ЗАШИФРОВАННЫЙ ТОМ 🔐️
addvault.new.readme.accessLocation.2=Это место доступа в хранилище. Любые файлы, добавленные в этот том, будут зашифрованы Cryptomator. Чтобы получить доступ к этому тому позже, просто разблокируйте его из приложения Cryptomator.
addvault.new.readme.accessLocation.3=Этот файл можно удалить.
## Existing
addvaultwizard.existing.instruction=Выберите файл "masterkey.cryptomator" из имеющегося хранилища.
addvaultwizard.existing.chooseBtn=Выбрать…
addvaultwizard.existing.filePickerTitle=Выберите файл мастер-ключа
addvaultwizard.existing.error=Невозможно добавить хранилище "%s": оно некорректное. См. информацию в журнале событий.
## Success
addvaultwizard.success.nextStepsInstructions=Добавлено хранилище "%s".\nДля добавления данных или доступа к содержимому нужно разблокировать хранилище. Его можно разблокировать и позже.
addvaultwizard.success.unlockNow=Разблокировать
# Remove Vault
removeVault.title=Удалить хранилище
removeVault.information=Cryptomator просто забудет это хранилище. Позже вы можете добавить его снова. Зашифрованные файлы не будут удалены с жёсткого диска.
removeVault.confirmBtn=Удалить хранилище
# Change Password
changepassword.title=Изменить пароль
changepassword.enterOldPassword=Введите текущий пароль для "%s"
changepassword.enterNewPassword=Введите новый пароль для хранилища
changepassword.reenterNewPassword=Подтвердите новый пароль
changepassword.passwordsMatch=Пароли совпадают
changepassword.passwordsDoNotMatch=Пароли не совпадают
changepassword.finalConfirmation=Я понимаю, что не смогу восстановить свои данные, если забуду пароль
# Forget Password
forgetPassword.title=Не помню пароль
forgetPassword.information=Сохранённый пароль от этого хранилища будет удалён из вашей связки ключей.
forgetPassword.confirmBtn=Не помню пароль
# Unlock
unlock.title=Разблокировать хранилище
unlock.passwordPrompt=Введите пароль для "%s"
unlock.savePassword=Сохранить пароль
unlock.unlockBtn=Разблокировать
## Success
unlock.success.message=Разблокировка "%s" успешно выполнена! Доступ в хранилище открыт.
unlock.success.revealBtn=Показать хранилище
# Migration
migration.title=Обновить хранилище
## Start
migration.start.prompt=Хранилище "%s" нужно обновить до более нового формата. Прежде чем продолжить, убедитесь, что нет отложенной синхронизации, которая может повлиять на хранилище.
migration.start.confirm=Да, моё хранилище полностью синхронизировано
## Run
migration.run.enterPassword=Введите пароль для "%s"
migration.run.startMigrationBtn=Перенести хранилище
## Sucess
migration.success.nextStepsInstructions=Перенос "%s" успешно выполнен.\nТеперь можно разблокировать хранилище.
migration.success.unlockNow=Разблокировать
# Preferences
preferences.title=Настройки
## General
preferences.general=Общие
preferences.general.theme=Оформление
preferences.general.startHidden=Скрывать окно при запуске Cryptomator
preferences.general.debugLogging=Вести журнал отладки
## Volume
preferences.volume=Виртуальный диск
preferences.volume.type=Тип тома
preferences.volume.webdav.port=Порт WebDAV
preferences.volume.webdav.scheme=Схема WebDAV
## Updates
preferences.updates=Обновления
preferences.updates.currentVersion=Текущая версия: %s
preferences.updates.autoUpdateCheck=Автоматически проверять наличие обновлений
preferences.updates.checkNowBtn=Проверить
preferences.updates.updateAvailable=Доступно обновление до версии %s.
# Main Window
main.closeBtn.tooltip=Закрыть
main.preferencesBtn.tooltip=Настройки
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Нажмите здесь, чтобы добавить хранилище
main.vaultlist.contextMenu.remove=Удалить хранилище
main.vaultlist.addVaultBtn=Добавить хранилище
## Vault Detail
### Locked
main.vaultDetail.lockedStatus=ЗАБЛОКИРОВАНО
main.vaultDetail.unlockBtn=Разблокировать
main.vaultDetail.optionsBtn=Параметры хранилища
### Unlocked
main.vaultDetail.unlockedStatus=РАЗБЛОКИРОВАНО
main.vaultDetail.accessLocation=Содержимое хранилища доступно здесь:
main.vaultDetail.revealBtn=Показать диск
main.vaultDetail.lockBtn=Заблокировать
main.vaultDetail.bytesPerSecondRead=чтение:
main.vaultDetail.bytesPerSecondWritten=запись:
main.vaultDetail.throughput.idle=бездействие
main.vaultDetail.throughput.kbps=%.1f КиБ/с
main.vaultDetail.throughput.mbps=%.1f МиБ/с
### Needs Migration
main.vaultDetail.migrateButton=Обновить хранилище
main.vaultDetail.migratePrompt=Хранилище должно быть обновлено до нового формата, прежде чем вы сможете получить к нему доступ
# Wrong File Alert
wrongFileAlert.title=Неизвестный файл
wrongFileAlert.btn=OK
wrongFileAlert.information=Вы пытались добавить файл или папку, которые, похоже, не являются хранилищем Cryptomator. Чтобы зашифровать данные, создайте и разблокируйте хранилище.
# Vault Options
## General
vaultOptions.general=Общие
vaultOptions.general.changePasswordBtn=Изменить пароль
vaultOptions.general.showRecoveryKeyBtn=Показать ключ восстановления
## Mount
vaultOptions.mount=Монтирование
vaultOptions.mount.readonly=Только чтение
vaultOptions.mount.driveName=Имя диска
vaultOptions.mount.customMountFlags=Свои флаги монтирования
vaultOptions.mount.winDriveLetterOccupied=занято
vaultOptions.mount.winDirChooser=Выберите пустой каталог
# Recovery Key
recoveryKey.title=Ключ восстановления
recoveryKey.enterPassword.prompt=Введите пароль, чтобы показать ключ для "%s":
recoveryKey.display.message=Ключ восстановления для "%s":
# Misc
passwordStrength.messageLabel.0=Очень слабый
passwordStrength.messageLabel.1=Слабый
passwordStrength.messageLabel.2=Хороший
passwordStrength.messageLabel.3=Сильный
passwordStrength.messageLabel.4=Очень сильный
# Quit
quit.prompt=Выйти из приложения? Есть разблокированные хранилища.
quit.lockAndQuit=Заблокировать и выйти
@@ -0,0 +1,183 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=Verkställ
generic.button.back=Bakåt
generic.button.cancel=Avbryt
generic.button.change=Ändra
generic.button.done=Klar
generic.button.next=Nästa
# Tray Menu
traymenu.showMainWindow=Visa
traymenu.showPreferencesWindow=Inställningar
traymenu.quitApplication=Avsluta
traymenu.vault.unlock=Lås upp
traymenu.vault.lock=Lås
traymenu.vault.reveal=Visa
# Add Vault Wizard
addvaultwizard.title=Lägg till valv
## Welcome
addvaultwizard.welcome.newButton=Skapa nytt valv
addvaultwizard.welcome.existingButton=Öppna befintligt valv
## New
### Name
addvaultwizard.new.nameInstruction=Välj namn för valvet
addvaultwizard.new.namePrompt=Valvets namn
### Location
addvaultwizard.new.locationInstruction=Var ska Cryptomator lagra de krypterade filerna för ditt valv?
addvaultwizard.new.locationLabel=Lagringsplats
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Anpassad plats
addvaultwizard.new.directoryPickerButton=Välj…
addvaultwizard.new.directoryPickerTitle=Välj katalog
addvaultwizard.new.enterPassword=Ange ett lösenord för valvet
addvaultwizard.new.fileAlreadyExists=Valvet kan inte skapas på denna plats då vissa filer redan finns.
addvaultwizard.new.invalidName=Felaktigt namn på valvet. Vänligen ange ett vanligt katalognamn.
### Password
addvaultwizard.new.reenterPassword=Bekräfta lösenordet
addvaultwizard.new.passwordsMatch=Lösenorden stämmer överens!
addvaultwizard.new.passwordsDoNotMatch=Lösenorden stämmer inte överens
addvaultwizard.new.createVaultBtn=Skapa Valv
### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=Detta är din återställningsnyckel. Förvara den väl, den är din enda chans att återställa din data om du tappar bort ditt lösenord.
addvaultwizard.new.recoveryKeySavedCheckbox=Ja, jag har säkerhetskopierat återställningsnyckeln
### Information
addvault.new.readme.storageLocation.fileName=VAD ÄR DETTA FÖR KATALOG.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ VALV-FILER ⚠️
addvault.new.readme.storageLocation.2=Detta är ditt valvs lagringsplats. {\\b ÄNDRA INTE} någon fil i denna katalog.
addvault.new.readme.storageLocation.3=Om du vill kryptera filer med Cryptomator, lås upp valvet och använd angiven enhet.
addvault.new.readme.storageLocation.4=Om du behöver hjälp, prova %s.
addvault.new.readme.accessLocation.fileName=VÄLKOMMEN TILL DITT VALV.rtf
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ KRYPTERAD VOLYM 🔐️
addvault.new.readme.accessLocation.2=Detta är ditt valvs åtkomstplats. Filer som läggs till i denna volym kommer att krypteras av Cryptomator. För att komma åt denna volym senare, lås bara upp den igen från Cryptomator-programmet.
addvault.new.readme.accessLocation.3=Du kan ta bort denna fil.
## Existing
addvaultwizard.existing.instruction=Välj "masterkey.cryptomator" för ditt befintliga valv.
addvaultwizard.existing.chooseBtn=Välj…
addvaultwizard.existing.filePickerTitle=Välj Masterkey-fil
addvaultwizard.existing.error=Kunde inte lägga till valv "%s": Inget giltigt valv. Vänligen kolla i loggen för mer information.
## Success
addvaultwizard.success.nextStepsInstructions=Lade till valv "%s".\nDu behöver låsa upp detta valv för att komma åt eller lägga till innehåll. Du kan även låsa upp det vid ett senare tillfälle.
addvaultwizard.success.unlockNow=Lås upp nu
# Remove Vault
removeVault.title=Ta bort valv
removeVault.information=Detta kommer bara ta bort valvet från Cryptomator. Du kan lägga till det igen senare. Inga krypterade filer kommer tas bort från din hårddisk.
removeVault.confirmBtn=Ta bort valv
# Change Password
changepassword.title=Ändra lösenord
changepassword.enterOldPassword=Ange nuvarande lösenord för "%s"
changepassword.enterNewPassword=Ange ett nytt lösenord för ditt valv
changepassword.reenterNewPassword=Bekräfta det nya lösenordet
changepassword.passwordsMatch=Lösenorden stämmer överens!
changepassword.passwordsDoNotMatch=Lösenorden stämmer inte överens
changepassword.finalConfirmation=Jag förstår att jag inte kommer kunna återställa mitt data om jag glömmer mitt lösenord
# Forget Password
forgetPassword.title=Glöm lösenord
forgetPassword.information=Detta kommer radera det sparade lösenordet för detta valv från ditt systems lösenordshantering.
forgetPassword.confirmBtn=Glöm lösenord
# Unlock
unlock.title=Lås upp valv
unlock.passwordPrompt=Ange lösenord för "%s":
unlock.savePassword=Spara lösenord
unlock.unlockBtn=Lås upp
## Success
unlock.success.message="%s" upplåst! Ditt valv är nu åtkomligt.
unlock.success.revealBtn=Visa valv
# Migration
migration.title=Uppgradera valv
## Start
migration.start.prompt=Ditt valv "%s" behöver uppdateras till ett nyare format. Säkerställ att ingen filsynkronisering kommer påverka valvet innan du fortsätter.
migration.start.confirm=Ja, mitt valv är synkroniserat
## Run
migration.run.enterPassword=Ange lösenordet för "%s"
migration.run.startMigrationBtn=Migrera valv
## Sucess
migration.success.nextStepsInstructions="%s" migrerades fullständigt.\nDu kan nu låsa upp ditt valv.
migration.success.unlockNow=Lås upp nu
# Preferences
preferences.title=Inställningar
## General
preferences.general=Allmänt
preferences.general.theme=Utseende
preferences.general.startHidden=Dölj fönster när Cryptomator startar
preferences.general.debugLogging=Aktivera debug loggning
## Volume
preferences.volume=Virtuell enhet
preferences.volume.type=Volym-typ
preferences.volume.webdav.port=WebDAV Port
preferences.volume.webdav.scheme=WebDAV Schema
## Updates
preferences.updates=Uppdateringar
preferences.updates.currentVersion=Nuvarande version: %s
preferences.updates.autoUpdateCheck=Kontrollera uppdateringar automatiskt
preferences.updates.checkNowBtn=Kontrollera nu
preferences.updates.updateAvailable=Uppdatering till version %s finns tillgänglig.
# Main Window
main.closeBtn.tooltip=Stäng
main.preferencesBtn.tooltip=Inställningar
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Klicka här för att lägga till valv
main.vaultlist.contextMenu.remove=Ta bort valv
main.vaultlist.addVaultBtn=Lägg till valv
## Vault Detail
### Locked
main.vaultDetail.lockedStatus=LÅST
main.vaultDetail.unlockBtn=Lås upp
main.vaultDetail.optionsBtn=Valv-inställningar
### Unlocked
main.vaultDetail.unlockedStatus=UPPLÅST
main.vaultDetail.accessLocation=Ditt valv's innehåll kan nås härifrån:
main.vaultDetail.revealBtn=Visa enhet
main.vaultDetail.lockBtn=Lås
main.vaultDetail.bytesPerSecondRead=läst:
main.vaultDetail.bytesPerSecondWritten=skrivet:
main.vaultDetail.throughput.idle=inaktiv
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Needs Migration
main.vaultDetail.migrateButton=Uppgradera valv
main.vaultDetail.migratePrompt=Ditt valv behöver uppgraderas till ett nytt format innan du kan använda det
# Wrong File Alert
wrongFileAlert.title=Okänd fil
wrongFileAlert.btn=Ok
wrongFileAlert.information=Du försöker lägga till en fil eller katalog som inte verkar vara ett Cryptomator-valv. För att kryptera din data, skapa och lås upp ett valv.
# Vault Options
## General
vaultOptions.general=Allmänt
vaultOptions.general.changePasswordBtn=Ändra lösenord
vaultOptions.general.showRecoveryKeyBtn=Visa Återsällningsnyckel
## Mount
vaultOptions.mount=Montering
vaultOptions.mount.readonly=Skrivskyddad
vaultOptions.mount.driveName=Enhetsnamn
vaultOptions.mount.customMountFlags=Egna monterings-flaggor
vaultOptions.mount.winDriveLetterOccupied=upptagen
vaultOptions.mount.winDirChooser=Välj en tom katalog
# Recovery Key
recoveryKey.title=Återställningsnyckel
recoveryKey.enterPassword.prompt=Ange ditt lösenord för att visa återställningsnyckeln för "%s":
recoveryKey.display.message=Återställningsnyckel för "%s":
# Misc
passwordStrength.messageLabel.0=Mycket svagt
passwordStrength.messageLabel.1=Svagt
passwordStrength.messageLabel.2=Skapligt
passwordStrength.messageLabel.3=Starkt
passwordStrength.messageLabel.4=Mycket starkt
# Quit
quit.prompt=Avsluta applikationen? Det finns olåsta valv.
quit.lockAndQuit=Lås och avsluta
@@ -0,0 +1,184 @@
# Locale Specific CSS files such as CJK, RTL,...
# Generics
## Button
generic.button.apply=Uygula
generic.button.back=Geri
generic.button.cancel=İptal
generic.button.change=Değiştir
generic.button.done=Bitti
generic.button.next=İleri
# Tray Menu
traymenu.showMainWindow=Göster
traymenu.showPreferencesWindow=Seçenekler
traymenu.quitApplication=Çık
traymenu.vault.unlock=Kilidi Aç
traymenu.vault.lock=Kilitle
traymenu.vault.reveal=Göster
# Add Vault Wizard
addvaultwizard.title=Kasa Ekle
## Welcome
addvaultwizard.welcome.newButton=Yeni Kasa Oluştur
addvaultwizard.welcome.existingButton=Varolan Kasayı
## New
### Name
addvaultwizard.new.nameInstruction=Kasa için bir isim seç
addvaultwizard.new.namePrompt=Kasa Adı
### Location
addvaultwizard.new.locationInstruction=Cryptomator kasanızın şifreli dosyalarını nerede depolasın?
addvaultwizard.new.locationLabel=Depolama yeri
addvaultwizard.new.locationPrompt=
addvaultwizard.new.directoryPickerLabel=Özel Konum
addvaultwizard.new.directoryPickerButton=Seç…
addvaultwizard.new.directoryPickerTitle=Dizin Seç
addvaultwizard.new.enterPassword=Kasa için bir şifre girin
addvaultwizard.new.fileAlreadyExists=Bazı nesneler varolduğu için kasa bu yolda oluşturulamıyor.
addvaultwizard.new.invalidName=Geçersiz kasa adı. Lütfen normal bir dizin adı kullanın.
addvaultwizard.new.ioException=Seçilen dizin temel bir testte başarısız oldu. Uygun erişim haklarına sahip olduğunuzdan ve hiçbir şeyin Cryptomator'u engellemediğinden emin olun.
### Password
addvaultwizard.new.reenterPassword=Şifreyi onayla
addvaultwizard.new.passwordsMatch=Şifreler eşleşti!
addvaultwizard.new.passwordsDoNotMatch=Şifreler eşleşmiyor
addvaultwizard.new.createVaultBtn=Kasa Oluştur
### Recovery Key
addvaultwizard.new.recoveryKeyInstruction=111/5000\nBu senin kurtarma anahtarın. Güvende tutun, şifrenizi kaybederseniz verilerinizi kurtarmak için tek şansınız bu.
addvaultwizard.new.recoveryKeySavedCheckbox=Evet, bu kurtarma anahtarının güvenli bir şekilde yedeğini aldım
### Information
addvault.new.readme.storageLocation.fileName=BU DİZİN NEDİR.rtf
addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️ KASA DOSYALARI ⚠️
addvault.new.readme.storageLocation.2=Bu kasanızın depolama yeri. Bu dizindeki herhangi bir dosyayı asla {\\b DEĞİŞTİRMEYİN}.
addvault.new.readme.storageLocation.3=Dosyaları Cryptomator kullanarak şifrelemek istiyorsanız kasanın kilidini açın ve verilen sürücüyü kullanın.
addvault.new.readme.storageLocation.4=Eğer yardıma ihtiyacınız varsa, %s 'ı deneyin.
addvault.new.readme.accessLocation.fileName=KASANIZA HOŞGELDİNİZ.rtf
addvault.new.readme.accessLocation.1=\\fs40\\qc 🔐️ ŞİFRELENMİŞ BİRİM 🔐️
addvault.new.readme.accessLocation.2=Bu kasanızın erişim yeri. Bu birime eklenen dosyalar Cryptomator tarafından şifrelenir. Bu birime daha sonra bir daha erişmek için Cryptomator uygulamasından tekrar kilidini kaldırmanız yeterlidir.
addvault.new.readme.accessLocation.3=Bu dosyayı silmeye çekinmeyin.
## Existing
addvaultwizard.existing.instruction=Varolan kasanızın "masterkey.cryptomator" dosyasını seçin.
addvaultwizard.existing.chooseBtn=Seç…
addvaultwizard.existing.filePickerTitle=Masterkey Dosyasını Seç
addvaultwizard.existing.error="%s" kasası eklenemiyor: Geçerli bir kasa değil. Daha fazla bilgi için lütfen hata günlüğüne bakınız.
## Success
addvaultwizard.success.nextStepsInstructions="%s" kasası eklendi.\nİçeriğe erişmek veya içerik eklemek için bu kasanın kilidini açmanız gerekir. Alternatif olarak, daha sonra herhangi bir zamanda kilidini açabilirsiniz.
addvaultwizard.success.unlockNow=Kilidi Şimdi Aç
# Remove Vault
removeVault.title=Kasayı Sil
removeVault.information=Bu, yalnızca Cryptomator'ın bu kasayı unutmasını sağlar. Daha sonra tekrar ekleyebilirsiniz. Şifrelenmiş hiçbir dosya sabit diskinizden silinmez.
removeVault.confirmBtn=Kasayı Sil
# Change Password
changepassword.title=Şifreyi Değiştir
changepassword.enterOldPassword="%s" için şuanki şifreyi gir
changepassword.enterNewPassword=Kasanız için yeni bir şifre girin
changepassword.reenterNewPassword=Yeni şifreyi onaylayın
changepassword.passwordsMatch=Şifreler eşleşti!
changepassword.passwordsDoNotMatch=Şifreler eşleşmiyor
changepassword.finalConfirmation=Şifremi unutursam verilerimi kurtaramayacağımın farkındayım
# Forget Password
forgetPassword.title=Şifreyi Unut
forgetPassword.information=Bu, bu kasanın kaydedilmiş şifresini sistem anahtarlığınızdan siler.
forgetPassword.confirmBtn=Şifreyi Unut
# Unlock
unlock.title=Kasa Kilidini Aç
unlock.passwordPrompt="%s" için şifre girin:
unlock.savePassword=Şifreyi Kaydet
unlock.unlockBtn=Kilidi Aç
## Success
unlock.success.message="%s" 'nin kilidi başarıyla açıldı! Kasanız şimdi erişilebilir durumda.
unlock.success.revealBtn=Kasayı Göster
# Migration
migration.title=Kasayı Güncelle
## Start
migration.start.prompt="%s" kasanızın daha yeni bir biçime güncellenmesi gerekiyor. Devam etmeden önce, bu kasayı etkileyen bekleyen bir senkronizasyon olmadığından emin olun.
migration.start.confirm=Evet, kasam tamamen senkronize edildi
## Run
migration.run.enterPassword="%s" için şifre girin
migration.run.startMigrationBtn=Kasayı Taşı
## Sucess
migration.success.nextStepsInstructions="%s" başarıyla taşındı.\nKasanızın kilidini şimdi kaldırabilirsiniz.
migration.success.unlockNow=Kilidi Şimdi Aç
# Preferences
preferences.title=Seçenekler
## General
preferences.general=Genel
preferences.general.theme=Görünüş ve Davranış
preferences.general.startHidden=Cryptomator'ı başlatırken pencereyi gizle
preferences.general.debugLogging=Hata ayıklama günlüğünü etkinleştir
## Volume
preferences.volume=Sanal Sürücü
preferences.volume.type=Birim Tipi
preferences.volume.webdav.port=WebDAV Portu
preferences.volume.webdav.scheme=WebDAV Düzeni
## Updates
preferences.updates=Güncellemeler
preferences.updates.currentVersion=Şuanki Sürüm: %s
preferences.updates.autoUpdateCheck=Güncellemeleri otomatik kontrol et
preferences.updates.checkNowBtn=Şimdi Kontrol Et
preferences.updates.updateAvailable=%s sürümüne güncelleme mevcut.
# Main Window
main.closeBtn.tooltip=Kapat
main.preferencesBtn.tooltip=Seçenekler
## Vault List
main.vaultlist.emptyList.onboardingInstruction=Kasa eklemek için buraya tıklayın
main.vaultlist.contextMenu.remove=Kasayı Sil
main.vaultlist.addVaultBtn=Kasa Ekle
## Vault Detail
### Locked
main.vaultDetail.lockedStatus=KİLİTLİ
main.vaultDetail.unlockBtn=Kilidi Aç
main.vaultDetail.optionsBtn=Kasa Ayarları
### Unlocked
main.vaultDetail.unlockedStatus=KİLİDİ AÇIK
main.vaultDetail.accessLocation=Kasa içeriğinize buradan erişilebilir:
main.vaultDetail.revealBtn=Sürücüyü Göster
main.vaultDetail.lockBtn=Kilitle
main.vaultDetail.bytesPerSecondRead=okuma:
main.vaultDetail.bytesPerSecondWritten=yazma:
main.vaultDetail.throughput.idle=boşta
main.vaultDetail.throughput.kbps=%.1f kiB/s
main.vaultDetail.throughput.mbps=%.1f MiB/s
### Needs Migration
main.vaultDetail.migrateButton=Kasayı Güncelle
main.vaultDetail.migratePrompt=Kasaya erişmeden önce kasanızın yeni bir formata yükseltilmesi gerekiyor
# Wrong File Alert
wrongFileAlert.title=Bilinmeyen Dosya
wrongFileAlert.btn=Tamam
wrongFileAlert.information=Cryptomator kasası gibi görünmeyen bir dosya veya klasör eklemeye çalıştınız. Verilerinizi şifrelemek için bir kasa oluşturun ve kilidini açın.
# Vault Options
## General
vaultOptions.general=Genel
vaultOptions.general.changePasswordBtn=Şifreyi Değiştir
vaultOptions.general.showRecoveryKeyBtn=Kurtarma Anahtarını Göster
## Mount
vaultOptions.mount=Bağlantı
vaultOptions.mount.readonly=Salt-Okunur
vaultOptions.mount.driveName=Sürücü Adı
vaultOptions.mount.customMountFlags=Özel Bağlantı Parametreleri
vaultOptions.mount.winDriveLetterOccupied=meşgul
vaultOptions.mount.winDirChooser=Boş bir dizin seçin
# Recovery Key
recoveryKey.title=Kurtarma Anahtarı
recoveryKey.enterPassword.prompt="%s" için kurtarma anahtarını göstermek üzere şifrenizi girin:
recoveryKey.display.message="%s" için Kurtarma Anahtarı:
# Misc
passwordStrength.messageLabel.0=Çok zayıf
passwordStrength.messageLabel.1=Zayıf
passwordStrength.messageLabel.2=Orta
passwordStrength.messageLabel.3=Güçlü
passwordStrength.messageLabel.4=Çok güçlü
# Quit
quit.prompt=Uygulamadan çıkmak mı istiyorsunuz? Hala kilidi açılmış kasalar var.
quit.lockAndQuit=Kilitle ve Çık
@@ -1,126 +0,0 @@
app.name = كريبتوماتور
# main.fxml
main.emptyListInstructions = اضغط هنا لاضافة محفظة
main.directoryList.contextMenu.remove = ازل من القائمة
main.directoryList.contextMenu.changePassword = تغيير كلمة المرور
main.addDirectory.contextMenu.new = انشاء محفظة جديدة
main.addDirectory.contextMenu.open = افتح محفظة موجوده
# welcome.fxml
welcome.checkForUpdates.label.currentlyChecking = فحص التحديثات
welcome.newVersionMessage = يمكنك الان تحميل الاصدار رقم %1$s\nالاصدار الحالي %2$s
# initialize.fxml
initialize.label.password = كلمة المرور
initialize.label.retypePassword = اعد كتابة كلمة المرور
initialize.button.ok = انشاء محفظة
initialize.messageLabel.alreadyInitialized = لقد تم تهيئة المحفظة
initialize.messageLabel.initializationFailed = تعذر تهيئة المحفظة . يرجي مراجعة ملف التفاصيل ( log file )
# notfound.fxml
notfound.label = تعذر العثور علي المحفظه , هل قمت بنقلها ؟
# upgrade.fxml
upgrade.button = ترقية المحفظة
upgrade.version3dropBundleExtension.msg = This vault needs to be migrated to a newer format.\n"%1$s" will be renamed to "%2$s".\nPlease make sure synchronization has finished before proceeding.
upgrade.version3dropBundleExtension.err.alreadyExists = Automatic migration failed.\n"%s" already exists.
# unlock.fxml
unlock.label.password = كلمة المرور
unlock.label.mountName = Drive Name
unlock.label.winDriveLetter = Custom Drive Letter
unlock.label.downloadsPageLink = جميع اصدارات كريبتوماتور
unlock.label.advancedHeading = خيارات اضافية
unlock.button.unlock = افتح المحفظة
unlock.button.advancedOptions.show = خيارات اكثر
unlock.button.advancedOptions.hide = خيارات اقل
unlock.choicebox.winDriveLetter.auto = دخول تلقائي
unlock.errorMessage.wrongPassword = كلمة مرور خاطئة
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = محفظة غير مدعومة . هذه المحفظة تم انشاؤها بواسطة اصدار اقدم من كريبتوماتور
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = محفظة غير مدعومة . هذه المحفظة تم انشاؤها بواسطة اصدار احدث من كريبتوماتور
# change_password.fxml
changePassword.label.oldPassword = كلمة المرور القديمة
changePassword.label.newPassword = كلمة المرور الجديدة
changePassword.label.retypePassword = اعد كتابة كلمة المرور
changePassword.label.downloadsPageLink = جميع اصدارات كريبتوماتور
changePassword.button.change = تغيير كلمة المرور
changePassword.errorMessage.wrongPassword = كلمة مرور خاطئة
changePassword.errorMessage.decryptionFailed = فشل فك التشفير
# unlocked.fxml
unlocked.button.lock = اغلاق المحفظة
unlocked.moreOptions.reveal = Reveal Drive
unlocked.label.revealFailed = Command failed
unlocked.label.unmountFailed = Ejecting drive failed
unlocked.label.statsEncrypted = مشفر
unlocked.label.statsDecrypted = غير مشفر
unlocked.ioGraph.yAxis.label = Throughput (MiB/s)
# settings.fxml
settings.version.label = الاصدار %s
settings.checkForUpdates.label = افحص التحديثات
# tray icon
tray.menu.open = فتح
tray.menu.quit = اغلاق
tray.infoMsg.title = لا يزال مستخدم
tray.infoMsg.msg = Cryptomator is still alive. Quit it from the tray icon.
tray.infoMsg.msg.osx = Cryptomator is still alive. Quit it from the menu bar icon.
initialize.messageLabel.passwordStrength.0 = ضعيف جدا
initialize.messageLabel.passwordStrength.1 = ضعيف
initialize.messageLabel.passwordStrength.2 = عادي
initialize.messageLabel.passwordStrength.3 = قوي
initialize.messageLabel.passwordStrength.4 = قوي جدا
initialize.label.doNotForget = هام \: في حالة نسيانك لكلمة المرور , لا يوجد طريقة لاستعادتها مره اخري
main.directoryList.remove.confirmation.title = ازالة المحفظة
main.directoryList.remove.confirmation.header = هل تريد فعلا ازالة المحفظة ؟
main.directoryList.remove.confirmation.content = The vault will only be removed from the list. To permanently delete it, please delete the vault from your filesystem.
upgrade.version3to4.msg = This vault needs to be migrated to a newer format.\nEncrypted folder names will be updated.\nPlease make sure synchronization has finished before proceeding.
upgrade.version3to4.err.io = Migration failed due to an I/O Exception. See log file for details.
# upgrade.fxml
upgrade.confirmation.label = Yes, I've made sure that synchronization has finished
unlock.label.savePassword = حفظ كلمة المرور
unlock.errorMessage.unauthenticVersionMac = Could not authenticate version MAC.
unlock.savePassword.delete.confirmation.title = حذف كلمة المرور المحفوظة
unlock.savePassword.delete.confirmation.header = Do you really want to delete the saved password of this vault?
unlock.savePassword.delete.confirmation.content = The saved password of this vault will be immediately deleted from your system keychain. If you'd like to save your password again, you'd have to unlock your vault with the "Save Password" option enabled.
settings.debugMode.label = Debug Mode
upgrade.version3dropBundleExtension.title = Vault Version 3 Upgrade (Drop Bundle Extension)
upgrade.version3to4.title = Vault Version 3 to 4 Upgrade
upgrade.version4to5.title = Vault Version 4 to 5 Upgrade
upgrade.version4to5.msg = This vault needs to be migrated to a newer format.\nEncrypted files will be updated.\nPlease make sure synchronization has finished before proceeding.\n\nNote\: Modification date of all files will be changed to the current date/time in the process.
upgrade.version4to5.err.io = Migration failed due to an I/O Exception. See log file for details.
unlock.label.revealAfterMount = Reveal Drive
unlocked.lock.force.confirmation.title = Locking of %1$s failed
unlocked.lock.force.confirmation.header = Do you want to force locking?
unlocked.lock.force.confirmation.content = This may be because other programs are still accessing files in the vault or because some other problem occurred.\n\nPrograms still accessing the files may not work correctly and data not already written by those programs may be lost.
unlock.label.unlockAfterStartup = Auto-Unlock on Start (Experimental)
unlock.errorMessage.unlockFailed = Unlock failed. See log file for details.
upgrade.version5toX.title = Vault Version Upgrade
upgrade.version5toX.msg = This vault needs to be migrated to a newer format.\nPlease make sure synchronization has finished before proceeding.
main.createVault.nonEmptyDir.title = Creating vault failed
main.createVault.nonEmptyDir.header = Chosen directory is not empty
main.createVault.nonEmptyDir.content = The selected directory already contains files (possibly hidden). A vault can only be created in an empty directory.
settings.webdav.port.label = WebDAV Port
settings.webdav.port.prompt = 0 \= Choose automatically
settings.webdav.port.apply = Apply
settings.webdav.prefGvfsScheme.label = WebDAV Scheme
settings.volume.label = Preferred Volume Type
settings.volume.webdav = WebDAV
settings.volume.fuse = FUSE
unlock.successLabel.vaultCreated = Vault was successfully created.
unlock.successLabel.passwordChanged = Password was successfully changed.
unlock.successLabel.upgraded = Vault was successfully upgraded.
unlock.label.useOwnMountPath = Custom Mount Point
welcome.askForUpdateCheck.dialog.title = Update check
welcome.askForUpdateCheck.dialog.header = Enable the integrated update check?
welcome.askForUpdateCheck.dialog.content = Recommended\: Enable the update check to always be sure you have the newest version of Cryptomator, with all security patches, installed.\n\nYou can change this from within the settings at any time.
settings.volume.dokany = Dokany
main.gracefulShutdown.dialog.title = Locking vault(s) failed
main.gracefulShutdown.dialog.header = Vault(s) in use
main.gracefulShutdown.dialog.content = One or more vaults are still in use by other programs. Please close them to allow Cryptomator to shut down properly, then try again.\n\nIf this doesn't work, Cryptomator can shut down forcefully, but this can incur data loss and is not recommended.
main.gracefulShutdown.button.tryAgain = Try Again
main.gracefulShutdown.button.forceShutdown = Force Shutdown
unlock.pendingMessage.unlocking = Unlocking vault...
unlock.failedDialog.title = Unlock failed
unlock.failedDialog.header = Unlock failed
unlock.failedDialog.content.mountPathNonExisting = Mount point does not exist.
unlock.failedDialog.content.mountPathNotEmpty = Mount point is not empty.
unlock.label.useReadOnlyMode = Read-Only
unlock.label.chooseMountPath = Choose empty directory…
ctrl.secPasswordField.nonPrintableChars = Password contains control characters.\nRecommendation\: Remove them to ensure compatibility with other clients.
ctrl.secPasswordField.capsLocked = Caps Lock is activated.
unlock.label.useCustomMountFlags = Custom Mount Flags
unlock.choicebox.winDriveLetter.occupied = occupied
@@ -1,128 +0,0 @@
app.name = Криптоматор
# main.fxml
main.emptyListInstructions = Натиснете тук за добавяне на сейф
main.directoryList.contextMenu.remove = Премахване от листата
main.directoryList.contextMenu.changePassword = Смяна на парола
main.addDirectory.contextMenu.new = Създаване на нов сейф
main.addDirectory.contextMenu.open = Отворяне на съществуващ сейф
# welcome.fxml
welcome.checkForUpdates.label.currentlyChecking = Проверка за обновления...
welcome.newVersionMessage = Версия %1$s може да бъде свалена.\nТази е %2$s.
# initialize.fxml
initialize.label.password = Парола
initialize.label.retypePassword = Повторете паролата
initialize.button.ok = Създаване на сейф
initialize.messageLabel.alreadyInitialized = Сейфа е вече активен
initialize.messageLabel.initializationFailed = Неуспешно активиране на сейф. Проверете лог файловете за повече информация.
# notfound.fxml
notfound.label = Сейфа не може да бъде намерен. Може би е бил преместен?
# upgrade.fxml
upgrade.button = Обновете сейфа
upgrade.version3dropBundleExtension.msg = Този сейф трябва да бъде променен към новия формат.\n"%1$s" ще бъде преименуван в "%2$s".\nМоля, уверете се, че синхронизацията е преключила преди да продължите.
upgrade.version3dropBundleExtension.err.alreadyExists = Автоматичната промяна е неуспешна. "%s" вече съществува.
# unlock.fxml
unlock.label.password = Парола
unlock.label.mountName = Име на диск
# Fuzzy
unlock.label.winDriveLetter = Инициали на диск
unlock.label.downloadsPageLink = Всички версии на Криптоматор
unlock.label.advancedHeading = Опции за напреднали
unlock.button.unlock = Отключване на сейф
unlock.button.advancedOptions.show = Повече опции
unlock.button.advancedOptions.hide = По-малко опции
unlock.choicebox.winDriveLetter.auto = Автоматично наименование на диска
unlock.errorMessage.wrongPassword = Неправилна парола
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Неподържана версия. Този сейф е бил създаден със стара версия на Криптоматор.
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Неподържана версия. Този сейф е бил създаден с по-нова версия на Криптоматор.
# change_password.fxml
changePassword.label.oldPassword = Стара парола
changePassword.label.newPassword = Нова парола
changePassword.label.retypePassword = Повторете паролата
changePassword.label.downloadsPageLink = Всички версии на Криптоматор
changePassword.button.change = Смени паролата
changePassword.errorMessage.wrongPassword = Неправилна парола
changePassword.errorMessage.decryptionFailed = Неуспешно декриптиране
# unlocked.fxml
unlocked.button.lock = Заключване на Сейфа
unlocked.moreOptions.reveal = Покажи диска
unlocked.label.revealFailed = Командата е неуспешна
unlocked.label.unmountFailed = Изваждането на диска е неуспешно
unlocked.label.statsEncrypted = криптирано
unlocked.label.statsDecrypted = декрептирано
unlocked.ioGraph.yAxis.label = Скорост (MB/s)
# settings.fxml
settings.version.label = Версия %s
settings.checkForUpdates.label = Проверка за обновления
# tray icon
tray.menu.open = Отворяне
tray.menu.quit = Изход
tray.infoMsg.title = Все още върви
tray.infoMsg.msg = Криптоматор все още върви. Излезте от иконата в трея.
tray.infoMsg.msg.osx = Криптоматор все още върви. Излезте от иконата в менюто.
initialize.messageLabel.passwordStrength.0 = Прекалено слаба
initialize.messageLabel.passwordStrength.1 = Слаба
initialize.messageLabel.passwordStrength.2 = Добра
initialize.messageLabel.passwordStrength.3 = Силна
initialize.messageLabel.passwordStrength.4 = Много силна
initialize.label.doNotForget = ВАЖНО\: Ако забравите паролата, няма начин да възстановите данните.
main.directoryList.remove.confirmation.title = Премахване на сейф
main.directoryList.remove.confirmation.header = Наистина ли искате да премахнете този сейф?
main.directoryList.remove.confirmation.content = Този сейф ще бъде премахнат само от листа. За да го изтриете напълно, моля, изтрийте сейфа от файл системата.
upgrade.version3to4.msg = Този сейф трябва да бъде преместен към по-нов формат.\nКриптираните имена на папки ще бъдат обновени.\nМоля, проверете дали сихронизацията е приключила преди да продължите.
upgrade.version3to4.err.io = Преместването е отменено поради грешка в диска. Вижте лог файла за детайли.
# upgrade.fxml
upgrade.confirmation.label = Да, сигурен съм, че сихронизацията е приключила
unlock.label.savePassword = Запазване на парола
unlock.errorMessage.unauthenticVersionMac = Неуспешна оторизация на MAC версията
unlock.savePassword.delete.confirmation.title = Изтриване на запазената парола
unlock.savePassword.delete.confirmation.header = Неистина ли искате да изтриете запазената парола за този сейф?
unlock.savePassword.delete.confirmation.content = Запазената парола за този сейф ще бъде незабавно премахната от Вашата система. Ако желаете да запазите паролата отново, трябва да отключите сейса с пусната опция "Запазване на павола".
settings.debugMode.label = Режим за отстраняване на грешки
upgrade.version3dropBundleExtension.title = Обновяване до сейф версия 3
upgrade.version3to4.title = Обновяване на сейф от 3-та до 4-та версия
upgrade.version4to5.title = Обновяване на сейф от 4-та до 5-та версия
upgrade.version4to5.msg = Този сейф трябва да бъде променен към по-нов формат.\nКриптираните файлове ще бъдат обновени.\nМоля, проверете дали сихронизацията е приключила преди да продължите.\n\nЗабележка\: Датата на промяна на всички файлове ще бъде обновена до момента.
upgrade.version4to5.err.io = Преместването провалено поради грешка в диска. Вижте лог файла за детайли.
unlock.label.revealAfterMount = Показване на диска
unlocked.lock.force.confirmation.title = Заключването на %1$s провалено
unlocked.lock.force.confirmation.header = Желаете ли принудително заключване?
unlocked.lock.force.confirmation.content = Това е може би защото други програми все още използват файловете в сейфа или защото има някакъв друг проблем.\n\nПрограмите, имащи достъп до файловете, може да не работят правилно и информацията, незаписана от тези програми, може да бъде изгубена.
unlock.label.unlockAfterStartup = Автоматично отключване при стартиране (Експериментално)
unlock.errorMessage.unlockFailed = Грешка при отключване. Вижте лог файла за детайли.
upgrade.version5toX.title = Обновяване на версията на сейфа
upgrade.version5toX.msg = Този сейф трябва да бъде обновен до по-нов формат.\nМоля, уверете се, че сихронизацията е приключила, преди да продължите.
main.createVault.nonEmptyDir.title = Неуспешно създаване на сейф
main.createVault.nonEmptyDir.header = Избраната директория не е празна
main.createVault.nonEmptyDir.content = Избраната директория съдържа файлове /може би скрити/. Сейфът може да бъде създаден само в празна директория
settings.webdav.port.label = WebCAM порт
settings.webdav.port.prompt = 0 \= Автоматично избиране
settings.webdav.port.apply = Приложи
settings.webdav.prefGvfsScheme.label = WebDAV схема
settings.volume.label = Метод за точка
settings.volume.webdav = WebDAV
settings.volume.fuse = Предпазител
unlock.successLabel.vaultCreated = Сейфът беше създаден успешно
unlock.successLabel.passwordChanged = Паролата беше сменена успешно
unlock.successLabel.upgraded = Криптоматор беше обновен
# Fuzzy
unlock.label.useOwnMountPath = Използвайте собствена точка за монтиране
welcome.askForUpdateCheck.dialog.title = Update check
welcome.askForUpdateCheck.dialog.header = Enable the integrated update check?
welcome.askForUpdateCheck.dialog.content = Recommended\: Enable the update check to always be sure you have the newest version of Cryptomator, with all security patches, installed.\n\nYou can change this from within the settings at any time.
settings.volume.dokany = Dokany
main.gracefulShutdown.dialog.title = Locking vault(s) failed
main.gracefulShutdown.dialog.header = Vault(s) in use
main.gracefulShutdown.dialog.content = One or more vaults are still in use by other programs. Please close them to allow Cryptomator to shut down properly, then try again.\n\nIf this doesn't work, Cryptomator can shut down forcefully, but this can incur data loss and is not recommended.
main.gracefulShutdown.button.tryAgain = Try Again
main.gracefulShutdown.button.forceShutdown = Force Shutdown
unlock.pendingMessage.unlocking = Unlocking vault...
unlock.failedDialog.title = Unlock failed
unlock.failedDialog.header = Unlock failed
unlock.failedDialog.content.mountPathNonExisting = Mount point does not exist.
unlock.failedDialog.content.mountPathNotEmpty = Mount point is not empty.
unlock.label.useReadOnlyMode = Read-Only
unlock.label.chooseMountPath = Choose empty directory…
ctrl.secPasswordField.nonPrintableChars = Password contains control characters.\nRecommendation\: Remove them to ensure compatibility with other clients.
ctrl.secPasswordField.capsLocked = Caps Lock is activated.
unlock.label.useCustomMountFlags = Custom Mount Flags
unlock.choicebox.winDriveLetter.occupied = occupied
@@ -1,128 +0,0 @@
app.name = Cryptomator
# main.fxml
main.emptyListInstructions = Feu click ací per afegir una caixa forta
main.directoryList.contextMenu.remove = Elimina de la llista
main.directoryList.contextMenu.changePassword = Canvia la contrasenya
main.addDirectory.contextMenu.new = Crea una caixa forta nova
main.addDirectory.contextMenu.open = Obri una caixa forta existent
# welcome.fxml
welcome.checkForUpdates.label.currentlyChecking = Comprovant actualitzacions
welcome.newVersionMessage = La versió %1$s és disponible per descarregar.\nLa versió actual és %2$s.
# initialize.fxml
initialize.label.password = Contrasenya
initialize.label.retypePassword = Torneu a escriure la contrasenya
initialize.button.ok = Crea una caixa forta
initialize.messageLabel.alreadyInitialized = La caixa forta ja està inicialitzada
initialize.messageLabel.initializationFailed = No s'ha pogut inicialitzar la caixa forta. Consulteu l'arxiu de registre per a més informació.
# notfound.fxml
notfound.label = No s'ha trobat la caixa forta. S'ha mogut a altre lloc?
# upgrade.fxml
upgrade.button = Actualitza la caixa forta
upgrade.version3dropBundleExtension.msg = Esta caixa forta es deu actualitzar a un format més modern.\nEs va a canviar el nom de "%1$s" a "%2$s".\nAssegureu-vos de que la sincronització ha acabat abans d'iniciar el procés.
upgrade.version3dropBundleExtension.err.alreadyExists = Error en la migració automàtica.\n"%s" ja existeix.
# unlock.fxml
unlock.label.password = Contrasenya
unlock.label.mountName = Nom de la unitat
# Fuzzy
unlock.label.winDriveLetter = Lletra de la unitat
unlock.label.downloadsPageLink = Totes les versions de Cryptomator
unlock.label.advancedHeading = Opcions avançades
unlock.button.unlock = Debloqueja la caixa forta
unlock.button.advancedOptions.show = Més opcions
unlock.button.advancedOptions.hide = Menys opcions
unlock.choicebox.winDriveLetter.auto = Assigna automàticament
unlock.errorMessage.wrongPassword = Contrasenya incorrecta
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = La caixa forta no és compatible. Aquesta caixa forta s'ha creat amb una versió anterior de Cryptomator.
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = La caixa forta no és compatible. Aquesta caixa forta s'ha creat amb una versió més nova de Cryptomator.
# change_password.fxml
changePassword.label.oldPassword = Contrasenya antiga
changePassword.label.newPassword = Contrasenya nova
changePassword.label.retypePassword = Torneu a escriure la contrasenya
changePassword.label.downloadsPageLink = Totes les versions de Cryptomator
changePassword.button.change = Canvia la contrasenya
changePassword.errorMessage.wrongPassword = Contrasenya incorrecta
changePassword.errorMessage.decryptionFailed = Ha fallat el desencriptatge
# unlocked.fxml
unlocked.button.lock = Bloqueja la caixa forta
unlocked.moreOptions.reveal = Mostra la unitat
unlocked.label.revealFailed = L'ordre ha fallat
unlocked.label.unmountFailed = Error al expulsar la unidad
unlocked.label.statsEncrypted = xifrat
unlocked.label.statsDecrypted = desxifrat
unlocked.ioGraph.yAxis.label = Velocitat de transferència de dades (MiB/s)
# settings.fxml
settings.version.label = Versió %s
settings.checkForUpdates.label = Comprova si hi ha actualitzacions
# tray icon
tray.menu.open = Obri
tray.menu.quit = Surt
tray.infoMsg.title = Encara s'està executant
tray.infoMsg.msg = Cryptomator encara està executant-se. Sortiu des de la icona de la safata.
tray.infoMsg.msg.osx = Cryptomator encara està executant-se. Sortiu des de la icona de la barra de menú
initialize.messageLabel.passwordStrength.0 = Molt dèbil
initialize.messageLabel.passwordStrength.1 = Dèbil
initialize.messageLabel.passwordStrength.2 = Acceptable
initialize.messageLabel.passwordStrength.3 = Forta
initialize.messageLabel.passwordStrength.4 = Molt forta
initialize.label.doNotForget = IMPORTANT\: No hi ha manera de recuperar les dades si oblideu la contrasenya.
main.directoryList.remove.confirmation.title = Suprimeix la caixa forta
main.directoryList.remove.confirmation.header = ¿Esteu segur que voleu suprimir aquesta caixa forta?
main.directoryList.remove.confirmation.content = La caixa forta només es suprimeix de la llista. Per tal de eliminar-la permanentment esborreu la caixa forta del vostre sistema de fitxers.
upgrade.version3to4.msg = S'ha de migrar la caixa forta a un format més nou.\nS'actualitzaran els noms xifrats de les carpetes.\nAssegureu-vos que la sincronització ha acabat abans de continuar.
upgrade.version3to4.err.io = Error en la migració degut a una excepció de E/S. Comproveu el registre per veure'n els detalls.\n
# upgrade.fxml
upgrade.confirmation.label = Sí, m'he assegurat que la sincronització hagi acabat
unlock.label.savePassword = Desa la contrasenya
unlock.errorMessage.unauthenticVersionMac = No s'ha pogut autenticar la versió de MAC.
unlock.savePassword.delete.confirmation.title = Elimina la contrasenya desada
unlock.savePassword.delete.confirmation.header = Esteu segur que voleu eliminar la contrasenya desada d'aquesta unitat?
unlock.savePassword.delete.confirmation.content = La contrasenya desada d'aquesta caixa forta va a ser eliminada inmediatament del clauer del seu sistema. Si voleu tornar a desar la contrasenya haureu de tornar a desbloquejar la vostra caixa forta i activar l'opció "Desa la contrasenya".
settings.debugMode.label = Mode de depuració
upgrade.version3dropBundleExtension.title = Actualitza la caixa forta a la versió 3 (Drop Bundle Extension)
upgrade.version3to4.title = Actualitza la caixa forta de la versió 3 a la 4
upgrade.version4to5.title = Actualitza la caixa forta de la versió 4 a la 5
upgrade.version4to5.msg = S'ha de migrar la caixa forta a un format més nou.\nS'actualitzaran els fitxers xifrats.\nAssegureu-vos que la sincronització ha acabat abans de continuar.\n\nNota\: la data de modificació de tots els fitxers es canviarà a la data/hora del procés.
upgrade.version4to5.err.io = La migració ha fallat a causa d'una excepció d'E/S. Comproveu el registre per veure'n els detalls.
unlock.label.revealAfterMount = Mostra la unitat
unlocked.lock.force.confirmation.title = Ha fallat el bloqueig de %1$s
unlocked.lock.force.confirmation.header = Voleu forçar el bloqueig?
unlocked.lock.force.confirmation.content = Això pot ser perquè altres programes encara estan accedint als fitxers de la caixa forta o perquè s'ha produït un altre problema.\n\nEls programes què encara estan accedint als fitxers poden funcionar incorrectament i les dades què aquests programes no hagin escrit es poden perdre.
unlock.label.unlockAfterStartup = Desbloqueig automàtic al iniciar (experimental)
unlock.errorMessage.unlockFailed = Ha fallat el desbloqueig. Comproveu el registre per veure'n els detalls.
upgrade.version5toX.title = Actualització de la versió de la caixa forta
upgrade.version5toX.msg = S'ha de migrar la caixa forta a un format més nou.\nAssegureu-vos que la sincronització ha acabat abans de continuar.
main.createVault.nonEmptyDir.title = Ha fallat la creació de la caixa forta
main.createVault.nonEmptyDir.header = El directori seleccionat no és buit
main.createVault.nonEmptyDir.content = Hi ha fitxers (possibement ocults) al directori seleccionat. Només es pot crear una caixa forta a un directori buit.
settings.webdav.port.label = Port WebDAV
settings.webdav.port.prompt = 0 \= Tria automàticament
settings.webdav.port.apply = Aplica
settings.webdav.prefGvfsScheme.label = Esquema de WebDAV
settings.volume.label = Tipus de volum preferit
settings.volume.webdav = WebDAV
settings.volume.fuse = FUSE
unlock.successLabel.vaultCreated = La caixa forta s'ha creat correctament.
unlock.successLabel.passwordChanged = La contrasenya s'ha canviat correctament.
unlock.successLabel.upgraded = Cryptomator s'ha actualitzat correctament.
# Fuzzy
unlock.label.useOwnMountPath = Utilitza un punt de muntatge personalitzat
welcome.askForUpdateCheck.dialog.title = Comprovació d'actualizacions
welcome.askForUpdateCheck.dialog.header = Activo la comprovació automàtica d'actualitzacions?
welcome.askForUpdateCheck.dialog.content = Recomanat\: Activa la comprovació d'actualitzacions per assegurar-vos que sempre teniu la darrera versió de Cryptomator instal·lada amb totes les actualitzacions de seguretat.\n\nPodeu canviar aquesta opció des de la configuració en qualsevol moment.
settings.volume.dokany = Dokany
main.gracefulShutdown.dialog.title = Ha fallat el bloqueig de la caixa(es) forta(es)
main.gracefulShutdown.dialog.header = La caixa(es) forta(es) és(són) en ús
main.gracefulShutdown.dialog.content = Hi ha programes encara estan utilitzant una caixa forta o més d'una. Tanqueu-los per permetre que Cryptomator es tanqui correctament i, a continuació, torneu-ho a intentar.\n\nSi això no funciona, es pot forçar l'aturada de Cryptomator tot i que no es recomana, donç pot comportar pèrdua de dades.
main.gracefulShutdown.button.tryAgain = Torna-ho a intentar
main.gracefulShutdown.button.forceShutdown = Força l'aturada
unlock.pendingMessage.unlocking = La caixa forta s'està desbloquejant...
unlock.failedDialog.title = El desbloqueig ha fallat
unlock.failedDialog.header = El desbloqueig ha fallat
unlock.failedDialog.content.mountPathNonExisting = El punt de muntatge no existeix.
unlock.failedDialog.content.mountPathNotEmpty = El punt de muntatge no és buit
unlock.label.useReadOnlyMode = Només de lectura
unlock.label.chooseMountPath = Trieu un directori buit...
ctrl.secPasswordField.nonPrintableChars = Password contains control characters.\nRecommendation\: Remove them to ensure compatibility with other clients.
ctrl.secPasswordField.capsLocked = Caps Lock is activated.
unlock.label.useCustomMountFlags = Custom Mount Flags
unlock.choicebox.winDriveLetter.occupied = occupied
@@ -1,130 +0,0 @@
app.name = Cryptomator
# main.fxml
main.emptyListInstructions = Trezor přidáte kliknutím zde\n
main.directoryList.contextMenu.remove = Odstranit ze seznamu
main.directoryList.contextMenu.changePassword = Změnit heslo
main.addDirectory.contextMenu.new = Vytvořit nový trezor
main.addDirectory.contextMenu.open = Otevřít existující trezor
# welcome.fxml
welcome.checkForUpdates.label.currentlyChecking = Hledání aktualizací...
welcome.newVersionMessage = Ke stažení je verze %1$s.\nNyní je nainstalovaná %2$s.
# initialize.fxml
initialize.label.password = Heslo
initialize.label.retypePassword = Zopakování hesla
initialize.button.ok = Vytvořit trezor
initialize.messageLabel.alreadyInitialized = Trezor je už připravený
initialize.messageLabel.initializationFailed = Trezor se nepodařilo připravit. Podrobnosti naleznete v souboru se záznamem událostí (log).
# notfound.fxml
notfound.label = Trezor nebyl nalezen. Možná byl přesunut?
# upgrade.fxml
upgrade.button = Přechod na novější verzi trezoru
upgrade.version3dropBundleExtension.msg = Tento trezor je třeba aktualizovat na novější formát.\n„%1$s“ bude přejmenováno na „%2$s“.\nNež budete pokračovat ověřte, že synchronizace byla dokončena.
upgrade.version3dropBundleExtension.err.alreadyExists = Automatický převod se nezdařil.\n„%s“ už existuje.
# unlock.fxml
unlock.label.password = Heslo
unlock.label.mountName = Název jednotky
# Fuzzy
unlock.label.winDriveLetter = Písmeno jednotky
unlock.label.downloadsPageLink = Všechny verze Cryptomator
unlock.label.advancedHeading = Pokročilé volby
unlock.button.unlock = Odemknout trezor
unlock.button.advancedOptions.show = Více možností
unlock.button.advancedOptions.hide = Méně možností
unlock.choicebox.winDriveLetter.auto = Přiřadit automaticky
unlock.errorMessage.wrongPassword = Chybné heslo
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Nepodporovaná verze trezoru. Byl vytvořen ve starším Cryptomator.
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Nepodporovaná verze trezoru. Byl vytvořen v novějším Cryptomator.
# change_password.fxml
changePassword.label.oldPassword = Původní heslo
changePassword.label.newPassword = Nové heslo
changePassword.label.retypePassword = Zopakujte heslo
changePassword.label.downloadsPageLink = Všechny verze Cryptomator
changePassword.button.change = Změnit heslo
changePassword.errorMessage.wrongPassword = Chybné heslo
changePassword.errorMessage.decryptionFailed = Nepodařilo se rozšifrovat
# unlocked.fxml
unlocked.button.lock = Uzamknout trezor
unlocked.moreOptions.reveal = Odkrýt jednotku
unlocked.label.revealFailed = Vykonání příkazu se nezdařilo
unlocked.label.unmountFailed = Odpojení jednotky se nezdařilo
unlocked.label.statsEncrypted = zašifrováno
unlocked.label.statsDecrypted = rozšifrováno
unlocked.ioGraph.yAxis.label = Propustnost (MiB/s)
# settings.fxml
settings.version.label = Verze %s
settings.checkForUpdates.label = Zjistit případné aktualizace
# tray icon
tray.menu.open = Otevřít
tray.menu.quit = Ukončit
tray.infoMsg.title = Stále ještě spuštěné
tray.infoMsg.msg = Cryptomator je pořád ještě spuštěný. Ukončete ho přes ikonu v oznamovací oblasti.
tray.infoMsg.msg.osx = Cryptomator je pořád ještě spuštěný. Ukončete ho z ikony v liště nabídek.
initialize.messageLabel.passwordStrength.0 = Velmi slabé
initialize.messageLabel.passwordStrength.1 = Slabé
initialize.messageLabel.passwordStrength.2 = Dobré
initialize.messageLabel.passwordStrength.3 = Silné
# Easter egg for Czech users.
initialize.messageLabel.passwordStrength.4 = Velmi silné
initialize.label.doNotForget = DŮLEŽITÉ\: Pokud heslo ztratíte/zapomenete, nenávratně přijdete o přístup k datům\!
main.directoryList.remove.confirmation.title = Odebrat trezor
main.directoryList.remove.confirmation.header = Opravdu chcete tento trezor odebrat?
main.directoryList.remove.confirmation.content = Trezor bude pouze odebrán ze seznamu v Cryptomator. Končené odstranění provedete až smazáním jeho složky na souborovém systému.
upgrade.version3to4.msg = Tento trezor je třeba aktualizovat na novější formát.\nNázvy šifrovaných složek budou aktualizovány.\nNež budete pokračovat ověřte, že byla dokončena synchronizace.
upgrade.version3to4.err.io = Převod se nezdařil kvůli výjimce na vst./výst. Podrobnosti naleznete v souboru se záznamem událostí (log).
# upgrade.fxml
upgrade.confirmation.label = Ano, je ověřeno, že synchronizace byla dokončena
unlock.label.savePassword = Uložit heslo
unlock.errorMessage.unauthenticVersionMac = Nedaří se ověřit MAC funkci verze.
unlock.savePassword.delete.confirmation.title = Smazat uložené heslo
unlock.savePassword.delete.confirmation.header = Opravdu chcete smazat uložené heslo pro tento trezor?
unlock.savePassword.delete.confirmation.content = Uložené heslo k tomuto trezoru bude okamžitě vymazáno ze systémové klíčenky. Pokud ho tam budete chtít znovu uložit, bude třeba trezor odemknout se zapnutou volbou „Uložit heslo“.
settings.debugMode.label = Ladící režim
# Extension of what please? File, protocol, aplication extension for example? And bundle of what with what? Thanks :)
upgrade.version3dropBundleExtension.title = Přechod z verze 3 trezoru na novější (odebrat příp. .cryptomator a registraci bundle v macOS)
upgrade.version3to4.title = Aktualizace trezoru z verze 3 na 4
upgrade.version4to5.title = Aktualizace trezoru z verze 4 na 5
upgrade.version4to5.msg = Tento trezor je třeba aktualizovat na novější formát.\nZašifrované soubory budou aktualizovány.\nNež budete pokračovat ověřte, že synchronizace byla dokončena.\n\nPozn.\: Datum úpravy bude v rámci toho u všech dotčených souborů změněn na aktuální datum a čas.
upgrade.version4to5.err.io = Převod se nezdařil kvůli chybě na vstupu nebo výstupu. Podrobnosti naleznete v souboru se záznamem událostí (log).
unlock.label.revealAfterMount = Odkrýt jednotku
unlocked.lock.force.confirmation.title = Zamykání %1$s se nezdařilo
unlocked.lock.force.confirmation.header = Chcete vynutit uzamčení?
unlocked.lock.force.confirmation.content = Toto může být způsobeno tím, že ostatní aplikace stále ještě přistupují k souborům v trezoru nebo došlo k nějakému jinému problému.\n\nMůže se ovšem stát, že aplikace které stáje ještě pracují se soubory z trezoru to nemusí ustát a může dojít ke ztrátě ještě neuložených dat.
unlock.label.unlockAfterStartup = Automatické odemknutí při spuštění (experimentální)
unlock.errorMessage.unlockFailed = Odemknutí se nezdařilo. Podrobnosti naleznete v souboru se záznamem událostí (log).
upgrade.version5toX.title = Aktualizace verze trezoru
upgrade.version5toX.msg = Tento trezor je třeba aktualizovat na novější formát.\nNež budete pokračovat ověřte, že byla dokončena synchronizace.
main.createVault.nonEmptyDir.title = Vytvoření trezoru se nezdařilo
main.createVault.nonEmptyDir.header = Zvolená složka není prázdná
main.createVault.nonEmptyDir.content = Zvolená složka už obsahuje soubory (možná skryté). Trezor je možné vytvořit pouze v prázdné složce.
settings.webdav.port.label = Port WebDAV
settings.webdav.port.prompt = 0 \= zvolit automaticky
settings.webdav.port.apply = Použít
settings.webdav.prefGvfsScheme.label = WebDAV schéma
settings.volume.label = Způsob připojení (mount)
settings.volume.webdav = WebDAV
settings.volume.fuse = FUSE
unlock.successLabel.vaultCreated = Trezor byl úspěšně vytvořen.
unlock.successLabel.passwordChanged = Heslo bylo úspěšně změněno.
unlock.successLabel.upgraded = Cryptomator byl úspěšně povýšen na novou verzi.
# Fuzzy
unlock.label.useOwnMountPath = Použít vlastní přípojný bod
welcome.askForUpdateCheck.dialog.title = Zjišťování aktualizací
welcome.askForUpdateCheck.dialog.header = Zjišťovat automaticky nové verze?
welcome.askForUpdateCheck.dialog.content = Ke zjištění aktualizací, Cryptomator stáhne aktuální verzi z instalačních serverů a zobrazí nápovědu, když je k dispozici novější verze, než je nainstalovaná.\n\nDoporučujeme zapnout zjišťování aktualizací a zajistit tak, že vždy budete mít nejnovější verzi Cryptomator, se všemi opravami zabezpečení nainstalovanými. Pokud automatické zjišťování nezapnete, je možné ručně stahovat nejnovější verzi z https\://cryptomator.org/downloads/.\n\nToto nastavení je možné kdykoli změnit v nastavení aplikace.
settings.volume.dokany = Dokany
main.gracefulShutdown.dialog.title = Zamčení trezorů se nezdařilo
main.gracefulShutdown.dialog.header = Trezory v používání
main.gracefulShutdown.dialog.content = Jeden nebo více trezorů je stále v používání ostatními programy. Ukončete je aby se Cryptomator mohl správně vypnout a zkuste to znovu.\n\nPokud to nezabere, Cryptomator je možné vypnout vynuceně, ale to může vést ke ztrátě dat a není proto doporučeno.
main.gracefulShutdown.button.tryAgain = Zkusit znovu
main.gracefulShutdown.button.forceShutdown = Vynutit vypnutí
unlock.pendingMessage.unlocking = Odemykání trezoru…
unlock.failedDialog.title = Odemknutí se nezdařilo
unlock.failedDialog.header = Odemknutí se nezdařilo
unlock.failedDialog.content.mountPathNonExisting = Přípojný bod neexistuje.
unlock.failedDialog.content.mountPathNotEmpty = Přípojný bod není prázdný.
unlock.label.useReadOnlyMode = Pouze pro čtení
unlock.label.chooseMountPath = Zvolte prázdnou složku…
ctrl.secPasswordField.nonPrintableChars = Heslo obsahuje řídící znaky.\nDoporučení\: Odeberete je kvůli kompatibilitě s ostatními klienty.
ctrl.secPasswordField.capsLocked = Je zapnutá klávesa Caps Lock.
unlock.label.useCustomMountFlags = Custom Mount Flags
unlock.choicebox.winDriveLetter.occupied = occupied
@@ -1,127 +0,0 @@
app.name = Cryptomator
# main.fxml
main.emptyListInstructions = Tryk her for at tilføje en ny Vault
main.directoryList.contextMenu.remove = Fjern fra listen
main.directoryList.contextMenu.changePassword = Skift adgangskode
main.addDirectory.contextMenu.new = Opret ny Vault
main.addDirectory.contextMenu.open = Åben en eksisterende Vault
# welcome.fxml
welcome.checkForUpdates.label.currentlyChecking = Tjek for opdateringer
welcome.newVersionMessage = Version %1$s kan nu hentes.\nDette er %2$s.
# initialize.fxml
initialize.label.password = Adgangskode
initialize.label.retypePassword = Gentag Adgangskode
initialize.button.ok = Opret Vault
initialize.messageLabel.alreadyInitialized = Vault er allerede initialiseret
initialize.messageLabel.initializationFailed = Kunne ikke initialisere Vault. Se logfilen for yderligere detaljer.
# notfound.fxml
notfound.label = Vault'en kunne ikke findes. Er den blevet flyttet?
# upgrade.fxml
upgrade.button = Opgradér Vault
upgrade.version3dropBundleExtension.msg = Denne Vault skal migreres til et nyere format.\n"%1$s" vil blive omdøbt til "%2$s".\nVent venligst til al synkronisering er gennemført, inden du fortsætter.
upgrade.version3dropBundleExtension.err.alreadyExists = Automatisk migrering fejlede.\n"%s" eksisterer allerede.
# unlock.fxml
unlock.label.password = Adgangskode
unlock.label.mountName = Drev navn
# Fuzzy
unlock.label.winDriveLetter = Drev bogstav
unlock.label.downloadsPageLink = Alle Cryptomator versioner
unlock.label.advancedHeading = Avancerede Indstillinger
unlock.button.unlock = Lås op for Vault
unlock.button.advancedOptions.show = Flere valgmuligheder
unlock.button.advancedOptions.hide = Færre valgmuligheder
unlock.choicebox.winDriveLetter.auto = Tildel automatisk
unlock.errorMessage.wrongPassword = Forkert adgangskode
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Ikke-understøttet Vault. Denne Vault er blevet oprettet med en ældre version af Cryptomator.
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Ikke-understøttet Vault. Denne Vault er blevet oprettet med en nyere version af Cryptomator.
# change_password.fxml
changePassword.label.oldPassword = Gammel adgangskode
changePassword.label.newPassword = Ny adgangskode
changePassword.label.retypePassword = Gentag adgangskode
changePassword.label.downloadsPageLink = Alle Cryptomator versioner
changePassword.button.change = Skift adgangskode
changePassword.errorMessage.wrongPassword = Forkert adgangskode
changePassword.errorMessage.decryptionFailed = Dekryptering fejlede
# unlocked.fxml
unlocked.button.lock = Lås Vault
unlocked.moreOptions.reveal = Vis drev
unlocked.label.revealFailed = Kommando fejlede
unlocked.label.unmountFailed = Afmontering af drev fejlede
unlocked.label.statsEncrypted = Krypteret
unlocked.label.statsDecrypted = Dekrypteret
unlocked.ioGraph.yAxis.label = Throughput (MiB/s)
# settings.fxml
settings.version.label = Version %s
settings.checkForUpdates.label = Tjek for opdateringer
# tray icon
tray.menu.open = Åbn
tray.menu.quit = Afslut
tray.infoMsg.title = Kører Stadig
tray.infoMsg.msg = Cryptomator kører stadig. Afslut programmet fra tray-ikonet.
tray.infoMsg.msg.osx = Cryptomator kører stadig. Afslut programmet fra menu-baren.
initialize.messageLabel.passwordStrength.0 = Meget svag
initialize.messageLabel.passwordStrength.1 = Svag
initialize.messageLabel.passwordStrength.2 = Mellem
initialize.messageLabel.passwordStrength.3 = Stærk
initialize.messageLabel.passwordStrength.4 = Meget stærk
initialize.label.doNotForget = VIGTIGT\: Hvis du glemmer dit password, er der ingen måde hvorpå data kan genskabes.
main.directoryList.remove.confirmation.title = Slet Vault
main.directoryList.remove.confirmation.header = Er du sikker på at du vil slette denne Vault?
main.directoryList.remove.confirmation.content = Valgte Vault vil kun blive slettet fra listen. For at slette denne permanent, skal du slette filerne fra dit filsystem.
upgrade.version3to4.msg = Denne Vault skal migreres til et nyere format.\nDe krypterede foldernavne vil blive opdateret.\nVent venligst til al synkronisering er gennemført, inden du fortsætter.
upgrade.version3to4.err.io = Migrering fejlede pga. en I/O fejl. Se logfilen for yderligere detaljer.
# upgrade.fxml
upgrade.confirmation.label = Ja, jeg har sikret mig at al synkronisering er gennemført.
unlock.label.savePassword = Gem adgangskode
unlock.errorMessage.unauthenticVersionMac = Kunne ikke autentificere versions-MAC
unlock.savePassword.delete.confirmation.title = Slet gemt adgangskode
unlock.savePassword.delete.confirmation.header = Er du sikker på at du vil slette den til Vault'en gemte adgangskode?
unlock.savePassword.delete.confirmation.content = Den til Vault'en gemte adgangskode vil blive slettet fra dit systems keychain med øjeblikkelig virkning. Hvis du vil gemme din adgangskode på ny, skal du låse din Vault op med indstillingen "Gem adgangskode" slået til.
settings.debugMode.label = Debug Tilstand
upgrade.version3dropBundleExtension.title = Vault Version 3 Opgradering (Drop Bundle Extension)
upgrade.version3to4.title = Vault Version 3 til 4 Opgradering
upgrade.version4to5.title = Vault Version 4 til 5 Opgradering
upgrade.version4to5.msg = Denne Vault skal migreres til et nyere format.\nDe krypterede filer vil blive opdateret.\nVent venligst til al synkronisering er gennemført, inden du fortsætter.\n\nNote\: Denne proces vil påvirke ændringsdato og -tidspunkt for samtlige filer.
upgrade.version4to5.err.io = Migrering fejlede pga. en I/O fejl. Se logfilen for yderligere detaljer.
unlock.label.revealAfterMount = Vis drev
unlocked.lock.force.confirmation.title = Locking of %1$s failed
unlocked.lock.force.confirmation.header = Do you want to force locking?
unlocked.lock.force.confirmation.content = This may be because other programs are still accessing files in the vault or because some other problem occurred.\n\nPrograms still accessing the files may not work correctly and data not already written by those programs may be lost.
unlock.label.unlockAfterStartup = Auto-Unlock on Start (Experimental)
unlock.errorMessage.unlockFailed = Unlock failed. See log file for details.
upgrade.version5toX.title = Vault Version Upgrade
upgrade.version5toX.msg = This vault needs to be migrated to a newer format.\nPlease make sure synchronization has finished before proceeding.
main.createVault.nonEmptyDir.title = Creating vault failed
main.createVault.nonEmptyDir.header = Chosen directory is not empty
main.createVault.nonEmptyDir.content = The selected directory already contains files (possibly hidden). A vault can only be created in an empty directory.
settings.webdav.port.label = WebDAV Port
settings.webdav.port.prompt = 0 \= Choose automatically
settings.webdav.port.apply = Apply
settings.webdav.prefGvfsScheme.label = WebDAV Scheme
settings.volume.label = Preferred Volume Type
settings.volume.webdav = WebDAV
settings.volume.fuse = FUSE
unlock.successLabel.vaultCreated = Vault was successfully created.
unlock.successLabel.passwordChanged = Password was successfully changed.
unlock.successLabel.upgraded = Vault was successfully upgraded.
unlock.label.useOwnMountPath = Custom Mount Point
welcome.askForUpdateCheck.dialog.title = Update check
welcome.askForUpdateCheck.dialog.header = Enable the integrated update check?
welcome.askForUpdateCheck.dialog.content = Recommended\: Enable the update check to always be sure you have the newest version of Cryptomator, with all security patches, installed.\n\nYou can change this from within the settings at any time.
settings.volume.dokany = Dokany
main.gracefulShutdown.dialog.title = Locking vault(s) failed
main.gracefulShutdown.dialog.header = Vault(s) in use
main.gracefulShutdown.dialog.content = One or more vaults are still in use by other programs. Please close them to allow Cryptomator to shut down properly, then try again.\n\nIf this doesn't work, Cryptomator can shut down forcefully, but this can incur data loss and is not recommended.
main.gracefulShutdown.button.tryAgain = Try Again
main.gracefulShutdown.button.forceShutdown = Force Shutdown
unlock.pendingMessage.unlocking = Unlocking vault...
unlock.failedDialog.title = Unlock failed
unlock.failedDialog.header = Unlock failed
unlock.failedDialog.content.mountPathNonExisting = Mount point does not exist.
unlock.failedDialog.content.mountPathNotEmpty = Mount point is not empty.
unlock.label.useReadOnlyMode = Read-Only
unlock.label.chooseMountPath = Choose empty directory…
ctrl.secPasswordField.nonPrintableChars = Password contains control characters.\nRecommendation\: Remove them to ensure compatibility with other clients.
ctrl.secPasswordField.capsLocked = Caps Lock is activated.
unlock.label.useCustomMountFlags = Custom Mount Flags
unlock.choicebox.winDriveLetter.occupied = occupied
@@ -1,126 +0,0 @@
app.name = Cryptomator
# main.fxml
main.emptyListInstructions = Klicken Sie hier, um neue Tresore hinzuzufügen
main.directoryList.contextMenu.remove = Aus Liste entfernen
main.directoryList.contextMenu.changePassword = Passwort ändern
main.addDirectory.contextMenu.new = Tresor erstellen
main.addDirectory.contextMenu.open = Tresor öffnen
# welcome.fxml
welcome.checkForUpdates.label.currentlyChecking = Prüfe auf Updates...
welcome.newVersionMessage = Version %1$s kann heruntergeladen werden.\nInstallierte Version %2$s.
# initialize.fxml
initialize.label.password = Passwort
initialize.label.retypePassword = Passwort bestätigen
initialize.button.ok = Tresor erstellen
initialize.messageLabel.alreadyInitialized = Tresor bereits vorhanden
initialize.messageLabel.initializationFailed = Fehler beim Initialisieren. Details in der Log-Datei.
# notfound.fxml
notfound.label = Tresor konnte nicht gefunden werden.\nWurde er verschoben?
# upgrade.fxml
upgrade.button = Tresor aktualisieren
upgrade.version3dropBundleExtension.msg = Dieser Tresor muss auf ein neueres Format aktualisiert werden.\n"%1$s" wird in "%2$s" umbenannt.\nStellen Sie bitte sicher, dass derzeit keine Synchronisation stattfindet.
upgrade.version3dropBundleExtension.err.alreadyExists = Migration fehlgeschlagen.\n"%s" existiert bereits.
# unlock.fxml
unlock.label.password = Passwort
unlock.label.mountName = Laufwerksname
unlock.label.winDriveLetter = Eigener Laufwerksbuchstabe
unlock.label.downloadsPageLink = Alle Cryptomator Versionen
unlock.label.advancedHeading = Erweiterte Optionen
unlock.button.unlock = Tresor entsperren
unlock.button.advancedOptions.show = Weitere Optionen
unlock.button.advancedOptions.hide = Weniger Optionen
unlock.choicebox.winDriveLetter.auto = Automatisch ermitteln
unlock.errorMessage.wrongPassword = Falsches Passwort
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Tresor nicht unterstützt. Der Tresor wurde mit einer älteren Version von Cryptomator erstellt.
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Tresor nicht unterstützt. Der Tresor wurde mit einer neueren Version von Cryptomator erstellt.
# change_password.fxml
changePassword.label.oldPassword = Altes Passwort
changePassword.label.newPassword = Neues Passwort
changePassword.label.retypePassword = Passwort bestätigen
changePassword.label.downloadsPageLink = Alle Cryptomator Versionen
changePassword.button.change = Passwort ändern
changePassword.errorMessage.wrongPassword = Falsches Passwort
changePassword.errorMessage.decryptionFailed = Entschlüsselung fehlgeschlagen
# unlocked.fxml
unlocked.button.lock = Tresor sperren
unlocked.moreOptions.reveal = Laufwerk anzeigen
unlocked.label.revealFailed = Befehl fehlgeschlagen
unlocked.label.unmountFailed = Trennen des Laufwerks fehlgeschlagen
unlocked.label.statsEncrypted = verschlüsselt
unlocked.label.statsDecrypted = entschlüsselt
unlocked.ioGraph.yAxis.label = Durchsatz (MiB/s)
# settings.fxml
settings.version.label = Version %s
settings.checkForUpdates.label = Auf Updates prüfen
# tray icon
tray.menu.open = Öffnen
tray.menu.quit = Beenden
tray.infoMsg.title = Cryptomator läuft noch
tray.infoMsg.msg = Cryptomator läuft noch. Mit dem Tray-Icon beenden.
tray.infoMsg.msg.osx = Cryptomator läuft noch. Über die Menüleiste beenden.
initialize.messageLabel.passwordStrength.0 = Sehr schwach
initialize.messageLabel.passwordStrength.1 = Schwach
initialize.messageLabel.passwordStrength.2 = Mittel
initialize.messageLabel.passwordStrength.3 = Stark
initialize.messageLabel.passwordStrength.4 = Sehr stark
initialize.label.doNotForget = WICHTIG\: Falls Sie Ihr Passwort vergessen, gibt es keine Möglichkeit Ihre Daten wiederherzustellen.
main.directoryList.remove.confirmation.title = Tresor entfernen
main.directoryList.remove.confirmation.header = Möchten Sie diesen Tresor wirklich entfernen?
main.directoryList.remove.confirmation.content = Dieser Tresor wird nur aus der Liste entfernt. Um den Tresor unwiderruflich zu löschen, entfernen Sie bitte den Tresor aus Ihrem Dateisystem.
upgrade.version3to4.msg = Dieser Tresor muss auf ein neueres Format aktualisiert werden.\nVerschlüsselte Ordnernamen werden dabei aktualisiert.\nStellen Sie bitte sicher, dass derzeit keine Synchronisation stattfindet.
upgrade.version3to4.err.io = Migration aufgrund eines I/O-Fehlers fehlgeschlagen.\nWeitere Informationen in der Log-Datei.
# upgrade.fxml
upgrade.confirmation.label = Ja, die Synchronisation ist abgeschlossen
unlock.label.savePassword = Passwort speichern
unlock.errorMessage.unauthenticVersionMac = Versions-MAC konnte nicht authentifiziert werden.
unlock.savePassword.delete.confirmation.title = Gespeichertes Passwort löschen
unlock.savePassword.delete.confirmation.header = Möchten Sie das gespeicherte Passwort von diesem Tresor wirklich löschen?
unlock.savePassword.delete.confirmation.content = Das gespeicherte Passwort von diesem Tresor wird sofort aus Ihrem System-Schlüsselbund gelöscht. Falls Sie das Passwort erneut speichern möchten, müssen Sie den Tresor entsperren und dabei die "Passwort speichern"-Option aktiviert haben.
settings.debugMode.label = Debug-Modus
upgrade.version3dropBundleExtension.title = Upgrade Tresor-Version 3 (Entfall der Bundle-Extension)
upgrade.version3to4.title = Upgrade Tresor-Version 3 zu 4
upgrade.version4to5.title = Upgrade Tresor-Version 4 zu 5
upgrade.version4to5.msg = Dieser Tresor muss auf ein neueres Format aktualisiert werden.\nVerschlüsselte Dateien werden dabei aktualisiert.\nStellen Sie sicher, dass keine Synchronisation stattfindet, bevor Sie fortfahren.\n\nHinweis\: Beim Upgrade wird das Änderungsdatum aller Dateien auf das aktuelle Datum geändert.
upgrade.version4to5.err.io = Migration aufgrund eines I/O-Fehlers fehlgeschlagen.\nWeitere Informationen in der Log-Datei.
unlock.label.revealAfterMount = Laufwerk anzeigen
unlocked.lock.force.confirmation.title = Sperren von %1$s fehlgeschlagen
unlocked.lock.force.confirmation.header = Möchten Sie das Sperren erzwingen?
unlocked.lock.force.confirmation.content = Dies kann passieren, wenn andere Programme weiterhin auf Dateien im Tresor zugreifen. Oder es ist ein anderes Problem aufgetreten.\n\nProgramme, die weiterhin auf die Dateien zugreifen, könnten nicht mehr richtig funktionieren, oder Daten, die durch diese Programme noch nicht geschrieben wurden, könnten verloren gehen.
unlock.label.unlockAfterStartup = Automatisch entsperren beim Start (Experimentell)
unlock.errorMessage.unlockFailed = Entsperren fehlgeschlagen. Siehe Log-Datei für Details.
upgrade.version5toX.title = Upgrade Tresor-Version 5 zu X
upgrade.version5toX.msg = Dieser Tresor muss auf ein neueres Format aktualisiert werden.\nStellen Sie sicher, dass keine Synchronisation stattfindet, bevor Sie fortfahren.
main.createVault.nonEmptyDir.title = Erstellung des Tresors fehlgeschlagen
main.createVault.nonEmptyDir.header = Ausgewählter Ordner ist nicht leer
main.createVault.nonEmptyDir.content = Der ausgewählte Ordner enthält bereits Dateien (möglicherweise unsichtbar). Ein Tresor kann nur innerhalb eines leeren Ordners erstellt werden.
settings.webdav.port.label = WebDAV-Port
settings.webdav.port.prompt = 0 \= automatische Auswahl
settings.webdav.port.apply = Anwenden
settings.webdav.prefGvfsScheme.label = WebDAV URL Schema
settings.volume.label = Laufwerkseinbindung
settings.volume.webdav = WebDAV
settings.volume.fuse = FUSE
unlock.successLabel.vaultCreated = Der Tresor wurde erfolgreich erstellt.
unlock.successLabel.passwordChanged = Das Passwort wurde erfolgreich geändert.
unlock.successLabel.upgraded = Der Tresor wurde erfolgreich aktualisiert.
unlock.label.useOwnMountPath = Eigenes Laufwerksverzeichnis
welcome.askForUpdateCheck.dialog.title = Auf Updates prüfen
welcome.askForUpdateCheck.dialog.header = Eingebaute Update-Prüfung aktivieren?
welcome.askForUpdateCheck.dialog.content = Empfehlung\: Aktivieren Sie die Update-Prüfung, um sicherzustellen, dass Sie stets die neueste Cryptomator-Version mit allen Sicherheits-Patches verwenden.\n\nDiese Einstellung können Sie jederzeit im Einstellungs-Menü ändern.
settings.volume.dokany = Dokany
main.gracefulShutdown.dialog.title = Sperren des Tresors gescheitert
main.gracefulShutdown.dialog.header = Tresor in Gebrauch
main.gracefulShutdown.dialog.content = Ein oder mehrere Tresore werden noch von anderen Programmen genutzt. Bitte schliessen Sie die Programme um es Cryptomator zu ermöglichen richtig herunter zu fahren. Versuchen Sie es danach erneut.\n\nFalls dies nicht klappt, kann Cryptomator das Beenden erzwingen. Dies kann zu einem Datenverlust führen und ist nicht empfohlen.
main.gracefulShutdown.button.tryAgain = Versuchen Sie es erneut
main.gracefulShutdown.button.forceShutdown = Herunterfahren erzwingen
unlock.pendingMessage.unlocking = Entsperre Tresor...
unlock.failedDialog.title = Entsperren fehlgeschlagen
unlock.failedDialog.header = Entsperren fehlgeschlagen
unlock.failedDialog.content.mountPathNonExisting = Laufwerksverzeichnis existiert nicht.
unlock.failedDialog.content.mountPathNotEmpty = Laufwerksverzeichnis ist nicht leer.
unlock.label.useReadOnlyMode = Nur lesend
unlock.label.chooseMountPath = Leeren Ordner auswählen…
ctrl.secPasswordField.nonPrintableChars = Das Passwort enthält Steuerzeichen.\nEmpfehlung\: Entfernen Sie diese, um die Kompatibilität mit anderen Clients sicherzustellen.
ctrl.secPasswordField.capsLocked = Die Feststelltaste ist aktiviert.
unlock.label.useCustomMountFlags = Eigene Laufwerksoptionen
unlock.choicebox.winDriveLetter.occupied = belegt
@@ -1,147 +0,0 @@
# Copyright (c) 2016 The Cryptomator Contributors
# This file is licensed under the terms of the MIT license.
# See the LICENSE.txt file for more info.
#
# Contributors:
# Sebastian Stenzel - initial translation
app.name=Cryptomator
ctrl.secPasswordField.nonPrintableChars=Password contains control characters.\nRecommendation: Remove them to ensure compatibility with other clients.
ctrl.secPasswordField.capsLocked=Caps Lock is activated.
# main.fxml
main.emptyListInstructions=Click here to add a vault
main.directoryList.contextMenu.remove=Remove from List
main.directoryList.contextMenu.changePassword=Change Password
main.addDirectory.contextMenu.new=Create New Vault
main.addDirectory.contextMenu.open=Open Existing Vault
main.directoryList.remove.confirmation.title=Remove Vault
main.directoryList.remove.confirmation.header=Do you really want to remove this vault?
main.directoryList.remove.confirmation.content=The vault will only be removed from the list. To permanently delete it, please delete the vault from your filesystem.
main.createVault.nonEmptyDir.title=Creating vault failed
main.createVault.nonEmptyDir.header=Chosen directory is not empty
main.createVault.nonEmptyDir.content=The selected directory already contains files (possibly hidden). A vault can only be created in an empty directory.
main.gracefulShutdown.dialog.title=Locking vault(s) failed
main.gracefulShutdown.dialog.header=Vault(s) in use
main.gracefulShutdown.dialog.content=One or more vaults are still in use by other programs. Please close them to allow Cryptomator to shut down properly, then try again.\n\nIf this doesn't work, Cryptomator can shut down forcefully, but this can incur data loss and is not recommended.
main.gracefulShutdown.button.tryAgain=Try Again
main.gracefulShutdown.button.forceShutdown=Force Shutdown
# welcome.fxml
welcome.checkForUpdates.label.currentlyChecking=Checking for Updates...
welcome.newVersionMessage=Version %1$s can be downloaded.\nThis is %2$s.
welcome.askForUpdateCheck.dialog.title=Update check
welcome.askForUpdateCheck.dialog.header=Enable the integrated update check?
welcome.askForUpdateCheck.dialog.content=Recommended: Enable the update check to always be sure you have the newest version of Cryptomator, with all security patches, installed.\n\nYou can change this from within the settings at any time.
# initialize.fxml
initialize.label.password=Password
initialize.label.retypePassword=Retype Password
initialize.button.ok=Create Vault
initialize.messageLabel.alreadyInitialized=Vault already initialized
initialize.messageLabel.initializationFailed=Could not initialize vault. See log file for details.
initialize.messageLabel.passwordStrength.0=Very weak
initialize.messageLabel.passwordStrength.1=Weak
initialize.messageLabel.passwordStrength.2=Fair
initialize.messageLabel.passwordStrength.3=Strong
initialize.messageLabel.passwordStrength.4=Very strong
initialize.label.doNotForget=IMPORTANT: If you forget your password, there is no way to recover your data.
# notfound.fxml
notfound.label=Vault couldn't be found. Has it been moved?
# upgrade.fxml
upgrade.confirmation.label=Yes, I've made sure that synchronization has finished
upgrade.button=Upgrade Vault
upgrade.version3dropBundleExtension.title=Vault Version 3 Upgrade (Drop Bundle Extension)
upgrade.version3dropBundleExtension.msg=This vault needs to be migrated to a newer format.\n"%1$s" will be renamed to "%2$s".\nPlease make sure synchronization has finished before proceeding.
upgrade.version3dropBundleExtension.err.alreadyExists=Automatic migration failed.\n"%s" already exists.
upgrade.version3to4.title=Vault Version 3 to 4 Upgrade
upgrade.version3to4.msg=This vault needs to be migrated to a newer format.\nEncrypted folder names will be updated.\nPlease make sure synchronization has finished before proceeding.
upgrade.version3to4.err.io=Migration failed due to an I/O Exception. See log file for details.
upgrade.version4to5.title=Vault Version 4 to 5 Upgrade
upgrade.version4to5.msg=This vault needs to be migrated to a newer format.\nEncrypted files will be updated.\nPlease make sure synchronization has finished before proceeding.\n\nNote: Modification date of all files will be changed to the current date/time in the process.
upgrade.version4to5.err.io=Migration failed due to an I/O Exception. See log file for details.
upgrade.version5toX.title=Vault Version Upgrade
upgrade.version5toX.msg=This vault needs to be migrated to a newer format.\nPlease make sure synchronization has finished before proceeding.
# unlock.fxml
unlock.label.password=Password
unlock.label.savePassword=Save Password
unlock.label.mountName=Drive Name
unlock.label.useCustomMountFlags=Custom Mount Flags
unlock.label.unlockAfterStartup=Auto-Unlock on Start (Experimental)
unlock.label.revealAfterMount=Reveal Drive
unlock.label.useReadOnlyMode=Read-Only
unlock.label.winDriveLetter=Custom Drive Letter
unlock.label.useOwnMountPath=Custom Mount Point
unlock.label.chooseMountPath=Choose empty directory…
unlock.label.downloadsPageLink=All Cryptomator versions
unlock.button.unlock=Unlock Vault
unlock.button.advancedOptions.show=More Options
unlock.button.advancedOptions.hide=Less Options
unlock.savePassword.delete.confirmation.title=Delete Saved Password
unlock.savePassword.delete.confirmation.header=Do you really want to delete the saved password of this vault?
unlock.savePassword.delete.confirmation.content=The saved password of this vault will be immediately deleted from your system keychain. If you'd like to save your password again, you'd have to unlock your vault with the "Save Password" option enabled.
unlock.choicebox.winDriveLetter.auto=Assign automatically
unlock.choicebox.winDriveLetter.occupied=occupied
unlock.errorMessage.wrongPassword=Wrong password
unlock.errorMessage.unlockFailed=Unlock failed. See log file for details.
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware=Unsupported vault. This vault has been created with an older version of Cryptomator.
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault=Unsupported vault. This vault has been created with a newer version of Cryptomator.
unlock.errorMessage.unauthenticVersionMac=Could not authenticate version MAC.
unlock.successLabel.vaultCreated=Vault was successfully created.
unlock.successLabel.passwordChanged=Password was successfully changed.
unlock.successLabel.upgraded=Vault was successfully upgraded.
unlock.failedDialog.title=Unlock failed
unlock.failedDialog.header=Unlock failed
unlock.failedDialog.content.mountPathNonExisting=Mount point does not exist.
unlock.failedDialog.content.mountPathNotEmpty=Mount point is not empty.
# change_password.fxml
changePassword.label.oldPassword=Old Password
changePassword.label.newPassword=New Password
changePassword.label.retypePassword=Retype Password
changePassword.label.downloadsPageLink=All Cryptomator versions
changePassword.button.change=Change Password
changePassword.errorMessage.wrongPassword=Wrong password
changePassword.errorMessage.decryptionFailed=Decryption failed
# unlocked.fxml
unlocked.button.lock=Lock Vault
unlocked.moreOptions.reveal=Reveal Drive
unlocked.label.revealFailed=Command failed
unlocked.label.unmountFailed=Ejecting drive failed
unlocked.label.statsEncrypted=encrypted
unlocked.label.statsDecrypted=decrypted
unlocked.ioGraph.yAxis.label=Throughput (MiB/s)
unlocked.lock.force.confirmation.title=Locking of %1$s failed
unlocked.lock.force.confirmation.header=Do you want to force locking?
unlocked.lock.force.confirmation.content=This may be because other programs are still accessing files in the vault or because some other problem occurred.\n\nPrograms still accessing the files may not work correctly and data not already written by those programs may be lost.
# settings.fxml
settings.version.label=Version %s
settings.checkForUpdates.label=Check for Updates
settings.webdav.port.label=WebDAV Port
settings.webdav.port.prompt=0 = Choose automatically
settings.webdav.port.apply=Apply
settings.webdav.prefGvfsScheme.label=WebDAV Scheme
settings.debugMode.label=Debug Mode
settings.volume.label=Preferred Volume Type
settings.volume.webdav=WebDAV
settings.volume.fuse=FUSE
settings.volume.dokany=Dokany
# tray icon
tray.menu.open=Open
tray.menu.quit=Quit
tray.infoMsg.title=Still Running
tray.infoMsg.msg=Cryptomator is still alive. Quit it from the tray icon.
tray.infoMsg.msg.osx=Cryptomator is still alive. Quit it from the menu bar icon.
@@ -1,130 +0,0 @@
app.name = Cryptomator
# main.fxml
main.emptyListInstructions = Haga clic aquí para añadir una caja fuerte
# should it be imperative?
main.directoryList.contextMenu.remove = Eliminar de la lista
main.directoryList.contextMenu.changePassword = Cambiar la contraseña
main.addDirectory.contextMenu.new = Crear una nueva caja fuerte
main.addDirectory.contextMenu.open = Abrir una caja fuerte existente
# welcome.fxml
welcome.checkForUpdates.label.currentlyChecking = Comprobando actualizaciones...
welcome.newVersionMessage = La versión %1$s está disponible para descargar.\nLa versión actual es %2$s.
# initialize.fxml
initialize.label.password = Contraseña
initialize.label.retypePassword = Repetir contraseña
initialize.button.ok = Crear caja fuerte
initialize.messageLabel.alreadyInitialized = La caja fuerte ya está inicializada
initialize.messageLabel.initializationFailed = No se ha podido inicializar la caja fuerte. Consulte el archivo de registro para más información.
# notfound.fxml
notfound.label = No se ha encontrado la caja fuerte. ¿Se movió a otro lugar?
# upgrade.fxml
upgrade.button = Actualizar caja fuerte
upgrade.version3dropBundleExtension.msg = Este caja fuerte se debe actualizar a un formato más moderno.\n"%1$s" se renombrará a "%2$s".\nAsegúrese de que la sincronización ha terminado antes de iniciar el proceso.
upgrade.version3dropBundleExtension.err.alreadyExists = Error en la migración automática.\n"%s" ya existe.
# unlock.fxml
unlock.label.password = Contraseña
unlock.label.mountName = Nombre de la unidad
# Fuzzy
unlock.label.winDriveLetter = Letra de la unidad
unlock.label.downloadsPageLink = Todas las versiones de Cryptomator
unlock.label.advancedHeading = Opciones avanzadas
unlock.button.unlock = Desbloquear caja fuerte
unlock.button.advancedOptions.show = Más opciones
unlock.button.advancedOptions.hide = Menos opciones
unlock.choicebox.winDriveLetter.auto = Asignar automáticamente
unlock.errorMessage.wrongPassword = Contraseña incorrecta
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Caja fuerte no soportada. Esta caja se ha creado con una versión anterior de Cryptomator.
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Caja fuerte no soportada. Esta caja se ha creado con una versión más moderna de Cryptomator.
# change_password.fxml
changePassword.label.oldPassword = Contraseña antigua
# Can also use "current password" = "contraseña actual"
changePassword.label.newPassword = Nueva contraseña
changePassword.label.retypePassword = Repetir contraseña
changePassword.label.downloadsPageLink = Todas las versiones de Cryptomator
changePassword.button.change = Cambiar contraseña
changePassword.errorMessage.wrongPassword = Contraseña incorrecta
changePassword.errorMessage.decryptionFailed = Error en el descifrado
# unlocked.fxml
unlocked.button.lock = Bloquear caja fuerte
unlocked.moreOptions.reveal = Revelar unidad
unlocked.label.revealFailed = La orden ha fallado
unlocked.label.unmountFailed = Error al expulsar la unidad
unlocked.label.statsEncrypted = encriptado
unlocked.label.statsDecrypted = desencriptado
unlocked.ioGraph.yAxis.label = Rendimiento (MiB/s)
# settings.fxml
settings.version.label = Versión %s
settings.checkForUpdates.label = Comprobar actualizaciones
# tray icon
tray.menu.open = Abrir
tray.menu.quit = Salir
tray.infoMsg.title = Todavía en ejecución
tray.infoMsg.msg = Cryptomator todavía está en ejecución. Para salir use el icono de la bandeja.
tray.infoMsg.msg.osx = Cryptomator todavía está en ejecución. Para salir use el icono de la barra del menú.
initialize.messageLabel.passwordStrength.0 = Muy débil
initialize.messageLabel.passwordStrength.1 = Débil
initialize.messageLabel.passwordStrength.2 = Suficiente
initialize.messageLabel.passwordStrength.3 = Fuerte
initialize.messageLabel.passwordStrength.4 = Muy fuerte
initialize.label.doNotForget = IMPORTANTE\: Si olvida la contraseña, no habrá ninguna manera de recuperar los datos.
main.directoryList.remove.confirmation.title = Borrar caja fuerte
main.directoryList.remove.confirmation.header = ¿Quiere de realmente eliminar esta caja fuerte?
main.directoryList.remove.confirmation.content = La caja fuerte solo se elimina de la lista. Para borrarla permanente elimine los datos de su sistema de archivos.
upgrade.version3to4.msg = Este caja fuerte se debe migrar a un formato más moderno.\nLos nombres de las carpetas cifradas se actualizarán.\nAsegúrese de que la sincronización ha terminado antes de continuar.
upgrade.version3to4.err.io = Error en la migración debido a una excepción de E/S. Consulte el archivo de registro para más información.
# upgrade.fxml
upgrade.confirmation.label = Sí, me he asegurado de que la sincronización ha terminado
unlock.label.savePassword = Guardar contraseña
unlock.errorMessage.unauthenticVersionMac = No se pudo autentificar la versión de MAC.
unlock.savePassword.delete.confirmation.title = Borrar contraseña guardada
unlock.savePassword.delete.confirmation.header = ¿Quiere realmente borrar la contraseña guardada de esta unidad?
unlock.savePassword.delete.confirmation.content = La contraseña guardada de esta caja fuerte, será borrada inmediatamente del sistema de claves. Si quiere guardar su contraseña de nuevo, tiene que volver a desbloquear la caja fuerte marcando la opción de "Guardar contraseña".
settings.debugMode.label = Modo depuración
upgrade.version3dropBundleExtension.title = Actualizar caja fuerte a la versión 3 (Drop Bundle Extension)
upgrade.version3to4.title = Actualizar caja fuerte de versión 3 a 4
upgrade.version4to5.title = Actualizar caja fuerte de versión 4 a 5
upgrade.version4to5.msg = Esta caja fuerte tiene que ser migrada a un formato más moderno.\nLos archivos encriptados se actualizarán.\nAsegúrese de que la sincronización ha terminado antes de iniciar el proceso.\n\nNota\: las fechas de modificación de todos los archivos, se cambiarán a la fecha actual.
upgrade.version4to5.err.io = Error en la migración debido a una excepción E/S. Consulte el archivo de registro para más información.
unlock.label.revealAfterMount = Revelar unidad
unlocked.lock.force.confirmation.title = Error al bloquear %1$s
unlocked.lock.force.confirmation.header = ¿Quiere forzar el bloqueo?
unlocked.lock.force.confirmation.content = Esto puede ser debido a que otros programas estén todavía accediendo a la caja fuerte o porque se ha producido algún otro problema.\n\nLos programas que estén todavía accediendo a los archivos pueden no funcionar correctamente y se pueden perder los datos pendientes de escribir por estos programas.
unlock.label.unlockAfterStartup = Autodesbloqueo al arrancar (experimental)
unlock.errorMessage.unlockFailed = Error al desbloquear. Consulte el archivo de registro para más información.
upgrade.version5toX.title = Actualizar la versión de la caja fuerte
upgrade.version5toX.msg = Esta caja fuerte debe ser migrada a un formato más moderno.\nAsegúrese de que la sincronización ha terminado antes de iniciar el proceso.
main.createVault.nonEmptyDir.title = Error en la creación de la bóveda
main.createVault.nonEmptyDir.header = El directorio elegido no está vacío
main.createVault.nonEmptyDir.content = El directorio seleccionado ya contiene archivos (posiblemente ocultos). Una bóveda sólo puede crearse en un directorio vacío.
settings.webdav.port.label = Puerto WebDAV
settings.webdav.port.prompt = 0 \= Elige automáticamente
settings.webdav.port.apply = Aplicar
settings.webdav.prefGvfsScheme.label = Esquema de WebDAV
settings.volume.label = Método de montaje
settings.volume.webdav = WebDAV
settings.volume.fuse = FUSE
unlock.successLabel.vaultCreated = La caja fuerte fue creada exitosamente.
unlock.successLabel.passwordChanged = La contraseña ha sido cambiada con éxito.
unlock.successLabel.upgraded = Cryptomator fue actualizado exitosamente.
# Fuzzy
unlock.label.useOwnMountPath = Usar Punto de montaje propio
welcome.askForUpdateCheck.dialog.title = Buscar actualización
welcome.askForUpdateCheck.dialog.header = ¿Habilitar la búsqueda de actualizaciones automática?
welcome.askForUpdateCheck.dialog.content = Para buscar actualizaciones, Cryptomator buscará la versión actual en los servidores de Cryptomator y le mostrará una sugerencia si hay una versión más nueva disponible.\n\nRecomendamos habilitar la comprobación de actualización para asegurarse siempre de que tiene instalada la versión más reciente de Cryptomator, con todos los parches de seguridad. Si no habilita la verificación de actualización, puede verificar y descargar la versión actual desde https\://cryptomator.org/downloads/.\n\nPuede cambiar esto en cualquier momento desde dentro de la configuración.
settings.volume.dokany = Dokany
main.gracefulShutdown.dialog.title = No fue posible cerrar la(s) caja(s) fuerte(s)
main.gracefulShutdown.dialog.header = Caja(s) Fuertes(s) en uso
main.gracefulShutdown.dialog.content = Una o más cajas fuertes están siendo utilizadas por otros programas. Por favor ciérrelos para permitir a Cryptomator cerrarse adecuadamente, e intente de nuevo.\n\nSi esto no funciona, Cryptomator puede cerrarse forzosamente, pero esta vía puede provocar pérdida de información y no es recomendada.
main.gracefulShutdown.button.tryAgain = Intente de nuevo
main.gracefulShutdown.button.forceShutdown = Forzar apagado
unlock.pendingMessage.unlocking = Desbloqueando la caja fuerte...
unlock.failedDialog.title = Falló el desbloqueo
unlock.failedDialog.header = Falló el desbloqueo
unlock.failedDialog.content.mountPathNonExisting = El punto de montaje no existe.
unlock.failedDialog.content.mountPathNotEmpty = El punto de montaje no está vacío.
unlock.label.useReadOnlyMode = Sólo lectura
unlock.label.chooseMountPath = Elija un directorio vacío...
ctrl.secPasswordField.nonPrintableChars = La contraseña contiene caracteres de control.\nRecomendación\: elimínelos para asegurar la compatibilidad con otros clientes.
ctrl.secPasswordField.capsLocked = Las mayúsculas están activadas.
unlock.label.useCustomMountFlags = Custom Mount Flags
unlock.choicebox.winDriveLetter.occupied = occupied
@@ -1,131 +0,0 @@
app.name = Cryptomator
# main.fxml
main.emptyListInstructions = Cliquer ici pour ajouter un coffre-fort
main.directoryList.contextMenu.remove = Retirer de la liste
main.directoryList.contextMenu.changePassword = Changer le mot de passe
main.addDirectory.contextMenu.new = Créer un nouveau coffre-fort
main.addDirectory.contextMenu.open = Ouvrir un coffre-fort existant
# welcome.fxml
welcome.checkForUpdates.label.currentlyChecking = Rechercher les mises à jour...
welcome.newVersionMessage = La version %1$s peut-être téléchargée.\nLa version installée est la %2$s.
# initialize.fxml
initialize.label.password = Mot de passe
initialize.label.retypePassword = Confirmation
initialize.button.ok = Créer le coffre-fort
initialize.messageLabel.alreadyInitialized = Coffre-fort déjà initialisé
initialize.messageLabel.initializationFailed = Impossible d'initialiser le coffre-fort. Vérifiez le fichier de log pour plus de détails.
# notfound.fxml
notfound.label = Coffre-fort introuvable. A-t-il été déplacé?
# upgrade.fxml
upgrade.button = Mettre à jour
upgrade.version3dropBundleExtension.msg = Ce coffre-fort doit être converti dans un format plus récent.\n"%1$s" sera renommé en "%2$s".\nAssurez-vous que la synchronisation est terminée avant de continuer.
upgrade.version3dropBundleExtension.err.alreadyExists = La conversion automatique a échoué.\n"%s" existe déjà.
# unlock.fxml
unlock.label.password = Mot de passe
unlock.label.mountName = Nom du lecteur
# Fuzzy
unlock.label.winDriveLetter = Lettre du lecteur
unlock.label.downloadsPageLink = Toutes les versions de Cryptomator
unlock.label.advancedHeading = Options avancées
unlock.button.unlock = Déverrouiller le coffre-fort
unlock.button.advancedOptions.show = Plus d'options
unlock.button.advancedOptions.hide = Moins d'options
unlock.choicebox.winDriveLetter.auto = Assigner automatiquement
unlock.errorMessage.wrongPassword = Mot de passe incorrect
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Coffre-fort non supporté. Ce coffre a été créé avec une ancienne version de Cryptomator.
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Coffre-fort non supporté. Ce coffre a été créé avec une version de Cryptomator plus récente.
# change_password.fxml
changePassword.label.oldPassword = Ancien mot de passe
changePassword.label.newPassword = Nouveau mot de passe
changePassword.label.retypePassword = Vérification
changePassword.label.downloadsPageLink = Toutes les versions de Cryptomator
changePassword.button.change = Modification du mot de masse
changePassword.errorMessage.wrongPassword = Mot de passe incorrect
# En français, on dit déchiffrement lorsque la clé est connue
changePassword.errorMessage.decryptionFailed = Echec du déchiffrement
# unlocked.fxml
unlocked.button.lock = Verrouiller le coffre-fort
unlocked.moreOptions.reveal = Voir le lecteur
unlocked.label.revealFailed = Echec de la commande
unlocked.label.unmountFailed = Echec de l'éjection du lecteur
# Crypter n'existe pas en français.
unlocked.label.statsEncrypted = chiffré
# Décryptage signifie récupérer les données en clair tout en ne connaissant pas la clé
unlocked.label.statsDecrypted = déchiffré
unlocked.ioGraph.yAxis.label = Débit (MiB/s)
# settings.fxml
settings.version.label = Version %s
settings.checkForUpdates.label = Vérifier les mises à jour
# tray icon
tray.menu.open = Ouvrir
tray.menu.quit = Quitter
tray.infoMsg.title = Action en cours
tray.infoMsg.msg = Cryptomator est toujours en fonctionnement. Utiliser l'icône de la barre des tâches pour quitter.
tray.infoMsg.msg.osx = Cryptomator est toujours en fonctionnement. Utilisez la barre de menu pour quitter.
initialize.messageLabel.passwordStrength.0 = Très faible
initialize.messageLabel.passwordStrength.1 = Faible
initialize.messageLabel.passwordStrength.2 = Correct
initialize.messageLabel.passwordStrength.3 = Fort
initialize.messageLabel.passwordStrength.4 = Très fort
initialize.label.doNotForget = ATTENTION \: Si vous oubliez votre mot de passe, il n'y aura aucun moyen de récupérer vos données.
main.directoryList.remove.confirmation.title = Supprimer le coffre-fort
main.directoryList.remove.confirmation.header = Voulez-vous vraiment supprimer ce coffre-fort ?
main.directoryList.remove.confirmation.content = Le coffre-fort sera seulement retiré de la liste. Pour le supprimer complètement, supprimez les fichiers depuis votre système de fichiers.
upgrade.version3to4.msg = Ce coffre-fort doit être converti dans un nouveau format. \nLes noms des dossiers chiffrés seront mis à jour.\nMerci de vous assurer que la synchronisation est terminée avant de continuer.
upgrade.version3to4.err.io = La migration a échoué à cause d'une erreur d'entrée/sortie. Vérifiez le fichier de log pour plus de détails.
# upgrade.fxml
upgrade.confirmation.label = Oui, je suis certain que la synchronisation est terminée
unlock.label.savePassword = Se souvenir du mot de passe
unlock.errorMessage.unauthenticVersionMac = Impossible d'authentifier la version MAC
unlock.savePassword.delete.confirmation.title = Supprimer le mot de passe sauvegardé
unlock.savePassword.delete.confirmation.header = Voulez vous vraiment oublier le mot de passe de ce coffre-fort ?
unlock.savePassword.delete.confirmation.content = Le mot de passe de ce coffre sera supprimé immédiatement du trousseau. Si vous voulez le sauvegarder à nouveau, vous devrez cocher la case "Se souvenir du mot de passe" lors du déverrouillage du coffre.
settings.debugMode.label = Mode Débug
upgrade.version3dropBundleExtension.title = Mise à jour du coffre-fort (en version 3 extension "Drop Bundle")
upgrade.version3to4.title = Mise à jour de la version du coffre-fort (v3 à v4)
upgrade.version4to5.title = Mise à jour de la version du coffre-fort (v4 à v5)
upgrade.version4to5.msg = Ce coffre-fort doit être migré vers un format plus récent.\nLes fichiers chiffrés seront mis à jour.\nVeuillez vérifier que la synchronisation est terminée avant de commencer.\n\nNote \: la date de modification des fichiers sera mise à jour avec la date courante.
upgrade.version4to5.err.io = La migration a échoué à cause d'une erreur d'entrée/sortie. Vérifiez le fichier de log pour plus de détails.
unlock.label.revealAfterMount = Voir le lecteur
unlocked.lock.force.confirmation.title = Le verrouillage de %1$s a échoué
unlocked.lock.force.confirmation.header = Voulez-vous forcer le verrouillage ?
unlocked.lock.force.confirmation.content = D'autres programmes sont peut être en train d'accéder à des fichiers dans le coffre-fort ou un autre problème s'est produit.\n\nLes programmes accédant encore aux fichiers pourraient ne pas fonctionner normalement et les données pas encore sauvegardées par ces programmes pourraient être perdues.
unlock.label.unlockAfterStartup = Déverouiller automatiquement au démarrage (experimental)
unlock.errorMessage.unlockFailed = Le déverouillage a échoué. Référez-vous au fichier log pour plus de détails.
upgrade.version5toX.title = Mise à jour du coffre-fort
upgrade.version5toX.msg = Ce coffre-fort doit être converti dans un format plus récent. \nVeuillez-vous assurez que la synchronisation est achevée avant de continuer.
main.createVault.nonEmptyDir.title = Echec de création du coffre-fort
main.createVault.nonEmptyDir.header = Le répertoire sélectionné n'est pas vide
main.createVault.nonEmptyDir.content = Le répertoire sélectionné contient déjà des fichiers (potentiellement cachés). Un coffre-fort ne peut être créé que dans un répertoire vide.
settings.webdav.port.label = Port de WebDAV
settings.webdav.port.prompt = 0 \= choisir automatiquement
settings.webdav.port.apply = Appliquer
settings.webdav.prefGvfsScheme.label = stratagème webdav
settings.volume.label = méthode de montage
settings.volume.webdav = WebDAV
settings.volume.fuse = limite
unlock.successLabel.vaultCreated = Le coffre-fort a été créé avec succès
unlock.successLabel.passwordChanged = Le mot de passe a été changé avec succès
unlock.successLabel.upgraded = Cryptomator a été mise à jour avec succès
# Fuzzy
unlock.label.useOwnMountPath = Utiliser son propre point de montage
welcome.askForUpdateCheck.dialog.title = vérification de la mise à jour
welcome.askForUpdateCheck.dialog.header = Activer le contrôle de mise à jour intégré ?
welcome.askForUpdateCheck.dialog.content = Pour vérifier les mises à jour, Cryptomator récupère la version actuelle sur les serveurs Cryptomator et vous donne un aperçu si une nouvelle version est disponible.\n\nNous vous recommandons d'activer la vérification de mise à jour pour vous assurer que vous avez toujours la dernière version de Cryptomator, avec tous les correctifs de sécurité, installés. Si vous n'activez pas le contrôle de mise à jour, vous pouvez vérifier et télécharger la version actuelle à partir de https\://cryptomator.org/downloads/.\n\nVous pouvez le modifier à tout moment à partir des paramètres.
settings.volume.dokany = Dokany
main.gracefulShutdown.dialog.title = Échec en fermant le coffre-fort.
main.gracefulShutdown.dialog.header = Coffre-fort est en cours d'utilisation.
main.gracefulShutdown.dialog.content = Un ou plusieurs coffre-forts sont en cours d'utilisation par d'autres logiciels. S'il vous plait, fermer-les pour permettre à Cryptomator de finir proprement.\n\nSi ça ne marche pas, Cryptomator peut fermer par force, mais cela peut résulter d'une perte de vos fichiers (non recommandé).
main.gracefulShutdown.button.tryAgain = Réessayez
main.gracefulShutdown.button.forceShutdown = Arrêt forcé
unlock.pendingMessage.unlocking = Déverrouillage du coffre-fort ...
unlock.failedDialog.title = Déverrouillage a échoué
unlock.failedDialog.header = Déverrouillage a échoué
unlock.failedDialog.content.mountPathNonExisting = Le point de montage n'existe pas.
unlock.failedDialog.content.mountPathNotEmpty = Le point de montage n'est pas vide.
unlock.label.useReadOnlyMode = Lecture Seulement
unlock.label.chooseMountPath = Choisissez un répertoire vide…
ctrl.secPasswordField.nonPrintableChars = Le mot de passe contient des caractères non imprimables.\nRecommandation\: Supprimez-les pour assurer la compatibilité avec d'autres clients.
ctrl.secPasswordField.capsLocked = Le verrouillage des majuscules est activé.
unlock.label.useCustomMountFlags = Custom Mount Flags
unlock.choicebox.winDriveLetter.occupied = occupied
@@ -1,128 +0,0 @@
app.name = Cryptomateur
# main.fxml
main.emptyListInstructions = Cliquez ici pour ajouter un coffre-fort
main.directoryList.contextMenu.remove = Retirer de la liste
main.directoryList.contextMenu.changePassword = Modifier le mot de passe
main.addDirectory.contextMenu.new = Créer un nouveau coffre-fort
main.addDirectory.contextMenu.open = Ouvrir un coffre-fort existant
# welcome.fxml
welcome.checkForUpdates.label.currentlyChecking = Vérification des mise à jour en cours ...
welcome.newVersionMessage = La version %1$s peut être téléchargée.\nCeci est %2$s.
# initialize.fxml
initialize.label.password = Mot de passe
initialize.label.retypePassword = Resaisir le mot de passe
initialize.button.ok = Créer un coffre-fort
initialize.messageLabel.alreadyInitialized = Coffre-fort déjà initialisé
initialize.messageLabel.initializationFailed = Incapable d'initialiser le coffre-fort. Voir le fichier journal pour plus de détails.
# notfound.fxml
notfound.label = Le coffre-fort n'a pu être trouvé. A t-il été déplacé ?
# upgrade.fxml
upgrade.button = Mise à jour coffre-fort
upgrade.version3dropBundleExtension.msg = Ce coffre-fort doit être migrer vers un format plus récent. "%1$s" sera renommé en "%2$s".\nVeuillez vous assurer que la synchronisation soit terminé avant de continuer.
upgrade.version3dropBundleExtension.err.alreadyExists = La migration automatique a échouée.\n"%s" existe déjà.
# unlock.fxml
unlock.label.password = Mot de passe
unlock.label.mountName = Nom du lecteur
# Fuzzy
unlock.label.winDriveLetter = Lettre du lecteur
unlock.label.downloadsPageLink = Toutes les version de Cryptomateur
unlock.label.advancedHeading = Options avancées
unlock.button.unlock = Déverrouiller le coffre-fort
unlock.button.advancedOptions.show = Plus d'options
unlock.button.advancedOptions.hide = Moins d'options
unlock.choicebox.winDriveLetter.auto = Assigner automatiquement
unlock.errorMessage.wrongPassword = Mauvais mot de passe
unlock.errorMessage.unsupportedVersion.vaultOlderThanSoftware = Coffre-fort non pris en charge. Ce coffre-fort a été créé avec une ancienne version de Cryptomateur.
unlock.errorMessage.unsupportedVersion.softwareOlderThanVault = Coffre-fort non pris en charge. Ce coffre-fort a été créé avec une version plus récente de Cryptomateur.
# change_password.fxml
changePassword.label.oldPassword = Ancient mot de passe
changePassword.label.newPassword = Nouveau mot de passe
changePassword.label.retypePassword = Resaisir mot de passe
changePassword.label.downloadsPageLink = Toutes les versions de Cryptomateur
changePassword.button.change = Modifier mot de passe
changePassword.errorMessage.wrongPassword = Mauvais mot de passe
changePassword.errorMessage.decryptionFailed = Le déchiffrement a échoué
# unlocked.fxml
unlocked.button.lock = Verrouiller coffre-fort
unlocked.moreOptions.reveal = Dévoiler le lecteur
unlocked.label.revealFailed = La commande a échoué
unlocked.label.unmountFailed = L'éjection du lecteur a échoué
unlocked.label.statsEncrypted = chiffré
unlocked.label.statsDecrypted = déchiffré
unlocked.ioGraph.yAxis.label = Débit (MiB/s)
# settings.fxml
settings.version.label = Version %s
settings.checkForUpdates.label = Rechercher les mises à jour
# tray icon
tray.menu.open = Ouvrir
tray.menu.quit = Quitter
tray.infoMsg.title = Toujours en cours
tray.infoMsg.msg = Crytomateur est encore actif. Quitter en utilisant de la zone de notification.
tray.infoMsg.msg.osx = Crytomateur est encore actif. Quitter en utilisant le menu de la barre d'icone.
initialize.messageLabel.passwordStrength.0 = Très faible
initialize.messageLabel.passwordStrength.1 = Faible
initialize.messageLabel.passwordStrength.2 = Bon
initialize.messageLabel.passwordStrength.3 = Fort
initialize.messageLabel.passwordStrength.4 = Très fort
initialize.label.doNotForget = IMPROTANT \: Si vous oubliez votre mot de passe, il n'y a aucun moyen de récupérer vos données.
main.directoryList.remove.confirmation.title = Retirer le coffre-fort
main.directoryList.remove.confirmation.header = Voulez-vous vraiment retirer le coffre-fort ?
main.directoryList.remove.confirmation.content = Ce coffre-fort sera seulement retirer de la liste. Pour le supprimer définitivement, veuillez le supprimer de votre système de fichiers.
upgrade.version3to4.msg = Ce coffre-fort doit être migrer vers un format plus récent.\nLe nom des répertoires chiffrés sera mis à jour.\nVeuillez vous assurer que la synchronisation soit terminé avant de continuer.
upgrade.version3to4.err.io = La migration a échoué à cause d'un Exception E/S. Voir le fichier journal pour plus de détails.
# upgrade.fxml
upgrade.confirmation.label = Oui, je me suis assuré que la synchronisation est terminé
unlock.label.savePassword = Sauvegarder le mot de passe
unlock.errorMessage.unauthenticVersionMac = Incapable d'authentifier la version MAC.
unlock.savePassword.delete.confirmation.title = Supprimer le mot de passe sauvegardé
unlock.savePassword.delete.confirmation.header = Etes-vous certain de vouloir supprimer le mot de passe sauvegardé pour ce coffre-fort ?
unlock.savePassword.delete.confirmation.content = Le mot de passe sauvegardé pour ce coffre-fort sera supprimé immédiatement de votre trousseau système. Si vous voulez sauvegarder votre mot de passe de nouveau, vous devez déverrouiller votre coffre-fort avec loption « Sauvegarder mot de passe » activée.
settings.debugMode.label = Mode débogage
upgrade.version3dropBundleExtension.title = Vault Version 3 Upgrade (Drop Bundle Extension)
upgrade.version3to4.title = Mise à jour de la version 3 à 4 du coffre-fort
upgrade.version4to5.title = Mise à jour de la version 4 à 5 du coffre-fort
upgrade.version4to5.msg = Ce coffre-fort doit être migrer vers un format plus récent.\nLes fichiers chiffrés seront mis à jour.\nVeuillez vous assurer que la synchronisation soit terminé avant de continuer.\n\nNote \: Lors du processus les dates de modification des fichiers seront modifiés à la date/heure courante.
upgrade.version4to5.err.io = La migration a échoué à cause d'un Exception E/S. Voir le fichier journal pour plus de détails.
unlock.label.revealAfterMount = Révéler le lecteur
unlocked.lock.force.confirmation.title = Le vérouillage de %1$s a échoué
unlocked.lock.force.confirmation.header = Voulez-vous forcer le vérouillage ?
unlocked.lock.force.confirmation.content = Ceci est peut-être dû au fait que d'autres programmes sont encore en train d'accéder aux fichiers dans le coffre-fort ou à cause d'un autre problème.\n\nLes programmes qui accèdent encore aux fichiers peuvent ne pas fonctionner correctement et les données non écrites par ces programmes peuvent être perdus.
unlock.label.unlockAfterStartup = Déverouillage automatique au lancement (Expérimantal)
unlock.errorMessage.unlockFailed = Déverouillage échoué. Voir le fichier journal pour plus de détails.
upgrade.version5toX.title = Mise à jour de la version du coffre-fort
upgrade.version5toX.msg = Ce coffre-fort doit être migrer vers un format plus récent.\nVeuillez vous assurer que la synchronisation soit terminé avant de continuer.
main.createVault.nonEmptyDir.title = La création du coffre-fort a échoué
main.createVault.nonEmptyDir.header = Le répertoire choisi n'est pas vide
main.createVault.nonEmptyDir.content = Le répertoire sélectionné contient déjà des fichiers (peut-être cachés). Un coffre-fort ne peut être créé que dans un répertoire vide.
settings.webdav.port.label = Port WebDAV
settings.webdav.port.prompt = 0 \= Coisir automatiquement
settings.webdav.port.apply = Appliquer
settings.webdav.prefGvfsScheme.label = Schema WebDAV
settings.volume.label = Type de volume préféré
settings.volume.webdav = WebDAV
settings.volume.fuse = FUSE
unlock.successLabel.vaultCreated = Le coffre-fort a été créé avec succès.
unlock.successLabel.passwordChanged = Mot de passe mis à jour avec succès.
unlock.successLabel.upgraded = Cryptomateur a été mis à jour avec succès.
# Fuzzy
unlock.label.useOwnMountPath = Utiliser point de montage personalisé
welcome.askForUpdateCheck.dialog.title = Vérifier mise à jour
welcome.askForUpdateCheck.dialog.header = Activer la vérification de mise à jour intégré ?
welcome.askForUpdateCheck.dialog.content = Afin de vérifier les mises à jour, Crytomateur ira chercher la version courante sur les serveurs de Cryptomateur et affichera une indication si une version plus récente est disponible.\n\nNous reccommandons d'activer l'option de vérification des mises à jour afin de vous assurer de disposer de la version la plus récente de Cryptomateur avec tous les correctifs de sécurité installés. Si vous n'activez pas l'option de vérification des mises à jour, vous pouvez véridier et télécharger la version courante à partir de https\://cryptomator.org/downloads/.\n\nVous pouvez modifier cela à tout moment dans les paramètres.
settings.volume.dokany = Dokany
main.gracefulShutdown.dialog.title = Vérouillage de(s) coffre-fort(s) a échoué(s)
main.gracefulShutdown.dialog.header = Coffre-fort(s) en cours d'utilisation
main.gracefulShutdown.dialog.content = Un ou plusieurs coffre-forts sont en cours d'utilisation par d'autres programmes. Veuillez les fermer afin de permettre à Cryptomateur de se fermer correctement, puis essayez de nouveau.\n\nSi cela ne fonctionne pas, Cryptomateur peut se fermer de manière forcé, mais cela peut provoquer des pertes de données et n'est pas recommandé.
main.gracefulShutdown.button.tryAgain = Essayez de nouveau
main.gracefulShutdown.button.forceShutdown = Fermeture forcée
unlock.pendingMessage.unlocking = Unlocking vault...
unlock.failedDialog.title = Unlock failed
unlock.failedDialog.header = Unlock failed
unlock.failedDialog.content.mountPathNonExisting = Mount point does not exist.
unlock.failedDialog.content.mountPathNotEmpty = Mount point is not empty.
unlock.label.useReadOnlyMode = Read-Only
unlock.label.chooseMountPath = Choose empty directory…
ctrl.secPasswordField.nonPrintableChars = Password contains control characters.\nRecommendation\: Remove them to ensure compatibility with other clients.
ctrl.secPasswordField.capsLocked = Caps Lock is activated.
unlock.label.useCustomMountFlags = Custom Mount Flags
unlock.choicebox.winDriveLetter.occupied = occupied

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